Avatar billede neigaard Nybegynder
27. april 2002 - 19:57 Der er 1 kommentar og
1 løsning

Nogle filer kan jeg ikke læse/skrive på min socket?

Jeg har følgende kode der skriver til en socket:

[SNIP]
OutputStream out = new BufferedOutputStream(socket.getOutputStream());
File f = new File(SOME_PATH);
InputStream fin = new FileInputStream(f);
int n;
while((n = fin.read()) > 0) {
  out.write(n);
}
out.flush();
fin.close();
[/SNIP]

Og følgende kode der læser fra en socket:

[SNIP]
InputStream in = new BufferedInputStream(socket.getInputStream());
File f = new File(SOME_PATH);
OutputStream vos = new FileOutputStream(f);
int n;
for(int i=0;i<fileSize;i++) {
  n = in.read();
  vos.write(n);
}
vos.close();
vos = null;
[/SNIP]

"fileSize" er alltid størrelsen på filen i bytes, det er helt sikkert.

Jeg kan overfører både binære og textfiler på denne måde, men nogle enkelte filer "hænger" enten når der læses fra dem eller skrives til socketen, jeg ved ikke helt hvilken?

Disse "mystiske" filer kan heller ikke læses af Windows Commanders indbyggede viewer, men jeg kan godt læse dem med Ultredit, den læser dem som HEX.

Hvorfor det, hvad skal jeg gøre for at kunne overføre dem?
Avatar billede carstenknudsen Nybegynder
28. april 2002 - 08:42 #1
Din linie fra første del af koden er gal:
while((n = fin.read()) > 0) {
det skal være
while((n = fin.read()) != -1) {
problemet er at du stopper med at
læse når du læser et nul, men
det kan være helt legalt. Det er
først når read metoden returnerer -1
at der ikke er mere tilbage.
Avatar billede neigaard Nybegynder
28. april 2002 - 10:28 #2
Jeps det var præsis det der gik galt, mange tak for hjælpen :)
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