Avatar billede kridley Nybegynder
24. februar 2004 - 17:17 Der er 2 kommentarer

Loop igennem en DataInputStream med readUTF

Hej eksperter,

Modtager på en klient en DataInputStream - denne indeholder et ubekendt antal objekter der på serveren er serialiseret ned på en outputstrøm. Disse objekter består af tre felter der serialiseres med writeUTF, writeInt, writeInt.

Når jeg modtager strømmen(input) på klienten skal jeg oprette disse objekter igen og smide dem ind i en Vector.

Problem:

(DataInputStream hedder dis)
Vector v = new Vector();
String s = "";
int i=0;
int j=0;
while ( /*Der stadig er noget at læse på DataInputStream, hvordan finder jeg ud af det???*/){
    s = dis.readUTF();
    i = dis.readInt();
    j = dis.readInt();
    v.add(new MitObjekt(s,i,j);
}

Håber det ikke er for indforstået!
Avatar billede ulrikm Nybegynder
24. februar 2004 - 18:00 #1
"Fanger" java.io.EOFException?
Avatar billede europe Nybegynder
24. februar 2004 - 20:03 #2
Jeg har ikke så meget styr på DataInputStream - men jeg har prøvet følgende her og det ser ud til at virke.

import java.io.*;

public class DataInputStr
{
  public static void main(String[] args)
  {
    File fil = new File("c:\\test.txt");     
   
    //make file.
    FileOutputStream fos = null;
    try
    {
      fos = new FileOutputStream(fil);
    }
    catch (FileNotFoundException ex)
    {
      ex.printStackTrace();
    }
    DataOutputStream dos = new DataOutputStream (fos);
    try
    {
      dos.writeUTF("hej med dig...");
      dos.writeInt(1);
      dos.writeInt(2);
      dos.writeUTF("Farvel igen øh æv");
      fos.close();
    }
    catch (IOException ex)
    {
      ex.printStackTrace();
    }

    //reads the file.
    FileInputStream fis = null;
    String read = "";
    int intRead = 0;
    boolean eof = false;
    try
    {
      fis = new FileInputStream(fil);     
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }
    DataInputStream dis = new DataInputStream(fis);

    /*while(!eof)
    {
      try
      {
        read += dis.readUTF()+"\n";
      }     
      catch(UTFDataFormatException utfdfe)
      {
        System.out.println("not utf");
      }
      catch (EOFException eofx)
      {
        System.out.println("End of file");
        eof = true;
      }
      catch(IOException ioe)
      {
        System.out.println("shit");
      }

    }*/
   

    try
    {
      System.out.println("bytes to read "+dis.available());     
      read = dis.readUTF();
     
      intRead += dis.readInt();
      intRead +=dis.readInt();
      read += "\n"+dis.readUTF();
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }
    System.out.println(read+"\n"+intRead);
  }
}

Det giver nogle fjel hvis man ikke læser værdier ud i samme rækkefølge som de er læst ind...

Håber det kan hjælpe...

/Europe
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