Svish Skrevet 8. mai 2007 Skrevet 8. mai 2007 Hvordan får man til dette? Jeg har følgende jspside som skal lese inn en fil fra et annet sted på disken, og sende den ut i browseren: response.setContentType(""); response.setHeader("Content-Disposition", "attachment;filename=\"" + file.getName() + "\""); if(file.length() < Integer.MAX_VALUE) response.setContentLength((int)file.length()); InputStream input = null; try { input = new FileInputStream(file); int b; while ((b = input.read()) > -1) { out.write(b); out.flush(); } } catch (Exception e) { System.out.println(e); } finally { try { input.close(); } catch(Exception e) { // dont care } } Dette fungerer, men det går utroolig tregt, og jvm jobber som en madman. Hva av alle disse readerne og inpustreamene bør en bruke for å lese inn en fil effektivt? Og hvordan kan jeg skrive den ut like effektivt? Jeg prøvde å bruke out.getOutputStream() og så bruke den istedet, da den støttet arrays med byte og ikke are enkeltbyte, men da får jeg en illigal stateexception eller noe sånt i jsp-server-loggen.. og det vil jeg jo helst unngå..
Zethyr Skrevet 8. mai 2007 Skrevet 8. mai 2007 Du bør lage en BufferedReader.. husker ikke helt hvordan, men ca. noe slik: BufferedReader in = new BufferedReader(new FileReader(new FileInputStream(file))); Vet ikke om alle de leddene er nødvendig, men det kan du finne ut ved å lete litt i API. Så kan du bruke følgende for å lese: String s = in.readLine(); Da leser du ei hel linje av gangen, og ting er buffret etter at det er lest fra disk så det går en god del fortere.
Svish Skrevet 8. mai 2007 Forfatter Skrevet 8. mai 2007 Men vil det være helt bra å lese en hel linje av gangen når det blant annet er binære filer en leser fra? type bilder, video og rene tekstfiler.
jurg Skrevet 8. mai 2007 Skrevet 8. mai 2007 Men vil det være helt bra å lese en hel linje av gangen når det blant annet er binære filer en leser fra? type bilder, video og rene tekstfiler. 8563266[/snapback] Kan ikke anbefale å lese binære filer linje for linje siden de ikke består av linjer. En linje er bare en ascii-streng terminert av en newlinechar. Hvis du prøver å lese en binærfil linje for linje vil du få helt tilfeldige deler data, dvs. du leser helt til du treffer på bytekombinasjonen for \n.
Svish Skrevet 8. mai 2007 Forfatter Skrevet 8. mai 2007 ja nemlig. så hva bør jeg da bruke for binære filer?
jurg Skrevet 9. mai 2007 Skrevet 9. mai 2007 ja nemlig. så hva bør jeg da bruke for binære filer? 8564036[/snapback] Du kan ta en titt på ByteArrayInputStream
Svish Skrevet 10. mai 2007 Forfatter Skrevet 10. mai 2007 (endret) funket med BufferedInputStream. Så det jeg endte opp med var: if(file != null) { response.setContentType("image/jpeg"); long filesize = file.length(); if(filesize < Integer.MAX_VALUE) { int contentLength = new Long(filesize).intValue(); response.setContentLength(contentLength); } BufferedInputStream input = null; try { input = new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); byte[] b = new byte[256]; while (input.read(b, 0, b.length) > -1) { output.write(b, 0, b.length); output.flush(); } } catch (Exception e) { response.sendRedirect("blank.jpg"); //System.out.println(e); } finally { try { input.close(); } catch(Exception e) { // dont care } } } dersom noen andre enn meg skulle være interessert Takk for hjelpen! Endret 10. mai 2007 av Tussi_qwerty
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå