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!
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