Løsningsforslag - oppgaver i Vedlegg A.3.3


Oppgave 1

Her må du velge deg en stor fil - gjerne en på mange megabyte:

  String filnavn = "c:/. . . . .";

  InputStream inn = new FileInputStream(filnavn);  // åpner filen
  long tid1 = System.currentTimeMillis();  // leser av klokken

  // 1. versjon - bruker bare read()
  int antall1 = 0, k;
  while ((k = inn.read()) != -1) if (k == 'A') antall1++;

  tid1 = System.currentTimeMillis() - tid1;  // tidsforbruket

  System.out.println("1. versjon: Tid = " + tid1 + " millisekunder  Antall = " + antall1);

  inn.close();  // lukker filen

  inn = new FileInputStream(filnavn);  // åpner filen på nytt
  long tid2 = System.currentTimeMillis();    // leser av klokken

  // 2. versjon - bruker read(byte[] b)
  byte[] b = new byte[4096];  // hjelpetabell på 4 kb
  int antall2 = 0, n;
  while ((n = inn.read(b)) != -1)
  {
    for (int i = 0; i < n; i++) if (b[i] == 'A') antall2++;
  }

  tid2 = System.currentTimeMillis() - tid2;  // tidsforbruket
  System.out.println("2. versjon: Tid = " + tid2 + " millisekunder  Antall = " + antall2);

  inn.close();  // lukker filen

  System.out.println("2. versjon er " + (tid1/tid2) + " ganger så rask som 1. versjon");