Avatar billede martinhrj Nybegynder
20. juli 2005 - 12:55 Der er 11 kommentarer og
1 løsning

Efterbehandling af uploaded fil

Efter at have uploaded en fil til en temp-fil, vil jeg gerne gemme filen i en database, for så at kunne streame den ud til en jsp-side på et senere tidspunkt. Men egentlig er det irellevant for mit spørgsmål. Jeg har forsøgt mig med følgende:

String fileName = request.getParameter("file");
FileInputStream is = new FileInputStream(fileName);
String fileContent = "";
int ch;
while ((ch = is.read()) >= 0)
  fileContent += Integer.toString(ch);
is.close();

Og så kommer så mit spørgsmål. Whileløkken tager længere tid at komme igennem, end det tager at uploade filen!!! Det kan da ikke passe. Er det ikke muligt at speede den process op?
Så vidt jeg har forstået skal jeg læse filen igennem med FileInputStream (i modsætning til FileReader), da jeg ikke arbejder med textfiler men med binære filer...

Håber nogen har et godt forslag... På forhånd tak.
Avatar billede arne_v Ekspert
20. juli 2005 - 13:00 #1
du læser et tegn af gangen - prøv og læs 10000 af gangen !
Avatar billede arne_v Ekspert
20. juli 2005 - 13:02 #2
eksempel:

            InputStream is = ...;
            OutputStream os = ...;
            byte[] b = new byte[10000];
            int n;
            while((n = is.read(b)) >= 0) {
                os.write(b,0,n);
            }
            os.close();
            is.close();
Avatar billede arne_v Ekspert
20. juli 2005 - 13:03 #3
ok - du skal ikke skrive til en output stream, men teknikken er stadig
den at bruge den read som tager et byte array som argument og returnerer
antal læste tegn
Avatar billede martinhrj Nybegynder
20. juli 2005 - 13:05 #4
Yep... Den havde jeg regnet ud ;)

Tak for hjælpen... jeg prøver lige.
Avatar billede martinhrj Nybegynder
20. juli 2005 - 13:23 #5
Det var ikke dårligt... ganske god performance forøgelse ;)

Smider du et svar?

Tak for hjælpen!
Avatar billede martinhrj Nybegynder
20. juli 2005 - 13:24 #6
Hov... så lige én ting til. De temp-filer der bliver lavet, når man uploader en fil... de bliver også slettet automatisk igen... ikke sandt? Eller skal jeg selv huske at slette dem?
Avatar billede arne_v Ekspert
20. juli 2005 - 13:24 #7
kommer her
Avatar billede arne_v Ekspert
20. juli 2005 - 13:25 #8
du kan også prøve at sætte den endnu højere op men du vil ikke se samme forbedring
fra 10000 til 10000000
Avatar billede arne_v Ekspert
20. juli 2005 - 13:27 #9
hvis upload software en korrekt skrevet så ja

bruger du COS eller Jakarta eller noget tredie ?
Avatar billede martinhrj Nybegynder
20. juli 2005 - 13:30 #10
Jeg bruger Resin webserver... så det må være noget der er indbygget deri. Jeg laver bare en "multipart/form-data"-form.
Avatar billede mercutio Nybegynder
07. august 2005 - 20:58 #11
Hmm jeg har netop læst ovenstående og undrer mig lidt. Når jeg læser en xml fil ind gør jeg således


File fil = new File(path + "/" + (String) fileList.get(i));
FileInputStream ind = new FileInputStream(fil);
bis = new BufferedInputStream(ind);
InputSource is = new InputSource(bis);
DOMParser parser = new DOMParser();
parser.parse(is);
newDocument = parser.getDocument();


Kan det gøres så det kører hurtigere?
Avatar billede arne_v Ekspert
07. august 2005 - 21:04 #12
Du bruger jo BufferedInputStream, hvilket hjælper meget.

Derudover har dem som har skrevet parseren sikkert kodet fornuftigt.

Det plejer ikke at være læsning fra fil som er den tunge del af
XML parsning.
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