Avatar billede strcoder Nybegynder
19. marts 2005 - 14:46 Der er 3 kommentarer og
1 løsning

Kodning af webserver - binære filer

Dette sp. er relateret til: http://www.eksperten.dk/spm/536730
--------------------------------------------------------------
Spørgsmålet i '536730' gik på at få sendt binære filer ud fra en webserver, det virker fint, men CPU'en optages 100% i længere tid.

Jeg har det problem med binære filer at alt CPU'en bruges til at lægge byte array'et i memory, er der er en måde at sende filerne i mindre bidder på? eller måske en anden måde at aflevere filerne i mindre bidder?

Koden der benytter arne_v's klasse:
-----------------------------------
private Socket forbindelse;

while (!forbindelse.isClosed()) {
  forbindelse.getOutputStream().write(hentBinFil(filnavn));

  ...
}

arne_v's klasse der lægger binære filer i et byte array:
-------------------------------
public static byte[] hentBinFil(String filnavn)
    throws IOException {
  byte[] b;
  byte[] tom = new byte[0];

  try {
    b = new byte[(int) (new File(filnavn)).length()];
    InputStream is = new FileInputStream(filnavn);
    is.read(b);

    is.close();
  } catch (FileNotFoundException e) { // filen blev ikke fundet
    b = new byte[0];
  }

  return b;
}
Avatar billede arne_v Ekspert
19. marts 2005 - 14:49 #1
Selvfølgelig er der det.

Men du skal nok have omstruktuereret koden lidt.

Hvis du har:
  - en input stream for filen
  - en output stream for socket
så kan du nemt kopiere N bytes af gangen.
Avatar billede arne_v Ekspert
19. marts 2005 - 14:51 #2
Hvis du f.eks. kigger i mit komplette eksempel i det spørgsmål:

private static void sendBinary(String filename, OutputStream os) throws IOException {
        InputStream is = new FileInputStream(PATH + filename);
        byte[] b = new byte[100000];
        int n;
        while((n = is.read(b)) >= 0){
            os.write(b, 0, n);
        }
    }

så kan du se at der tager jeg 100 KB af gangen
Avatar billede strcoder Nybegynder
19. marts 2005 - 16:05 #3
Ja det er da klart, jeg fik ikke kigget ordentligt efter i første sp., det tog mig kun 5 minutter at tilpasse min kode efter dit eksempel, tak for hjælpen:)

Smid et svar for points
Avatar billede arne_v Ekspert
19. marts 2005 - 16:08 #4
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester