04. januar 2002 - 16:27Der er
7 kommentarer og 1 løsning
DataInpuStream fra Socket skal kickstartes og bruger 100% cpu, løsning ?
Jeg er ved at lave en FTP server i java, men er stødt på et problem når clienten sender filer til serveren, mærkeligt nok returnerer .available() ikke noget medmindre man først læser fra strømmen og derefter spørger på den, hvad kan det være ? Som koden er nu overfører den filerne som den skal, men den bruger også 100% cpu og det er jo ikke så godt, hvordan forhindrer jeg det ?
Koden som bruges når klienten sender filer:
else if (userCommand.equals(\"STOR\")) { if (anonymousLogIn) { if (!(userDir.substring(userDir.length()-1, userDir.length())).equals(\"/\")) { userDir += \"/\"; }
out.println(\"125 \"); dataOutSocket = dataSocket.accept(); dataInData = new DataInputStream(dataOutSocket.getInputStream()); fileWriter = new FileOutputStream(new File(data.getAnonymousDir() + userDir + tmp.substring(5)));
byte[] tmpByte = new byte[1000]; int count = 0; tmpByte[count++] = dataInData.readByte();
while (dataInData.available() > 0) { tmpByte[count++] = dataInData.readByte(); if (count == 1000) { fileWriter.write(tmpByte); fileWriter.flush(); count = 0; } }
Jeg har også prøvet at kun læse en byte af gangen også skrive den til filen, det var faktisk den bedste løsning, men så kan hastigheden højst kommer op på 200 kb pr. sec lokalt og det burde da være mere når det er lokalt ?
1) Det er ikke sikkert at .available() returnerer noget, da den ikke blokerer. Den checker bare om der er en byte i strømen. Den venter ikke (som en læsoperation gør) til at der kommer data in. 2 ) Overvej at bruge BufferedInputStream og BufferedOutputStream for dine læse/skrive funktioner.
Selvom jeg bruger BufferedInputStream hvordan skal jeg så vide hvor længe den skal blive ved med at læse ? Jeg ved jo ikke hvor stor den fil som clienten sender er ?
Nå projektet er lagt på hylden for lang tid siden, virker stadig ikke, men det ser ikke ud til at der sker mere her. jeg lukker og slukker, tak for hjælpen.
Synes godt om
Ny brugerNybegynder
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.