Løsningsforslag - oppgaver i Vedlegg A.3.4


Oppgave 1

Her vil Programkode A.3.4 b) være mindre effektiv enn 2. versjon av Programkode A.3.3 d).

Oppgave 2

Her blir det kastet et unntak fordi det i for-løkken leses én mer enn grensen. Da vil ikke reset() virke.

Oppgave 3

  BufferedInputStream inn =            // bruker 4 som bufferstørrelse
    new BufferedInputStream(new FileInputStream("e:/abc/fil.txt"), 4);

  int grense = 20;
  inn.mark(grense);                     // merket settes i posisjon 0

  for (int i = 0; i < grense; i++) System.out.print((char)inn.read());
  System.out.println();  // ny linje

  inn.reset();  // lesingen starter om igjen
  for (int i = 0; i < 5; i++) System.out.print((char)inn.read());
  System.out.println();  // ny linje

  inn.skip(15);
  int k;
  while ((k = inn.read()) != -1) System.out.print((char)k);

  inn.close();

  // Utskrift:
  // ABCDEFGHIJKLMNOPQRST
  // ABCDE
  // UVWXYZ

Oppgave 4

I flg. kode brukes metodene available() og skip() til å flytte lesingen til siste byte på filen. Men her må en passe på at Z faktisk er siste byte. Hvis en lager filen ved hjelp av en teksteditor er det fort gjort at det kommer inn et eller flere ekstrategn på slutten (CR og EOL). Det må en unngå for at koden under skal virke korrekt.

  BufferedInputStream inn =            // bruker 4 som bufferstørrelse
    new BufferedInputStream(new FileInputStream("e:/abc/fil.txt"), 4);

  inn.skip(inn.available() - 1);  // hopper over alle borsett fra den siste
  System.out.println((char)inn.read());  // Utskrift Z

  inn.close();