Avatar billede casualty Nybegynder
21. august 2003 - 13:45 Der er 5 kommentarer og
1 løsning

Oversætning af socket filoverførsel til pseudokode

Er der nogen der vil forklare mig nedenstående kode i pseudokode??... Jeg har lidt svært ved at forstå hvad der sker...

*********************************************************

  ServerSocket serverSocket=new ServerSocket(1234);
  Socket socket=serverSocket.accept();
  File f = new File("C:\\test2");
  InputStream instr = socket.getInputStream();
  OutputStream outstr = new FileOutputStream(f);
  int n;
  byte[] b = new byte[1000];
  while((n = instr.read(b)) >= 0)
  {
    outstr.write(b, 0, n);
  }

******************************************
Det kikser især for mig omkring:

  while((n = instr.read(b)) >= 0)
  {
    outstr.write(b, 0, n);
  }

Kan dette ikke brydes ned til mindre bidder således at jeg bedre kan forstå det??

PS: koden virker fint, jeg vil bare gerne fatte den...

Mvh Casualty
Avatar billede arne_v Ekspert
21. august 2003 - 13:49 #1
int n;
  byte[] b = new byte[1000];
  while((n = instr.read(b)) >= 0)
  {
    outstr.write(b, 0, n);
  }

oversættelse:

alloker 1000 bytes til buffer b
læs fra socket (n = antal læste bytes, bytes læses til buffer b)
hvis n < 0 p.g.a. der ikke r mere at læse så afbryder vi while løkken
udskriv n bytes fra b startende i 0 (= de bytes vi lige har læst)
Avatar billede arne_v Ekspert
21. august 2003 - 13:50 #2
Programmer et en lile server applikation som lytter på port 1234 og
accepterer en connection og skriver alle bytes den modtager til
en fil test2..
Avatar billede casualty Nybegynder
21. august 2003 - 14:02 #3
Hvordan kan n blive < 0 ? Er det fordi den returnerer -1 når den ikke har mere at læse?
Avatar billede arne_v Ekspert
21. august 2003 - 14:09 #4
Ja !
Avatar billede arne_v Ekspert
21. august 2003 - 14:10 #5
Fra docs:

public int read(byte[] b)
        throws IOException

    Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.

    If b is null, a NullPointerException is thrown. If the length of b is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at end of file, the value -1 is returned; otherwise, at least one byte is read and stored into b.
Avatar billede casualty Nybegynder
21. august 2003 - 14:13 #6
Tak for det...Det hjalp en hel del...

Mvh Casualty
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