我试图找出对ObjectInputStream.readObject()
的多次调用如何正确读取不同类型的未知长度的数据。
例如(如下所示),我使用对ObjectOutputStream.writeObject()
方法的多次调用,将一个整数数组和一个字符串写入文件。
当我使用ObjectInputStream.readObject()
多次调用回读数据时,int
ObjectInputStream
未知oin
数组的长度,那么它如何才能正确找到数组的长度和以下String
Hello
?
类型的未知长度是否会成为ObjectInputStream.readObject()
的问题?
Random random = new Random();
int[] numbers = new int[100];
for (int i=0; i<100; i++){
numbers[i] = random.nextInt();
}
// output
try(FileOutputStream fout = new FileOutputStream("Object.txt");
ObjectOutputStream oout = new ObjectOutputStream(fout)){
oout.writeObject(numbers);
oout.writeObject("Hello");
} catch (IOException e){
System.err.println(e);
}
// input
try(FileInputStream fin = new FileInputStream("Object.txt");
ObjectInputStream oin = new ObjectInputStream(fin)){
int[] input = (int[]) oin.readObject();
String str = (String) oin.readObject();
for (int i=0; i<100; i++){
if (input[i] != numbers[i])
System.out.println("The i-th numbers " + input[i] + " and " + numbers[i] + " read and written are not equal.");
}
System.out.println(str);
} catch (IOException | ClassNotFoundException e){
System.err.println(e);
}
感谢。
答案 0 :(得分:1)
它不是未知,它存储在流中。所有必要的数据都存储在流中,以允许ObjectInputStream
正确读取它。
这也是您需要同时使用ObjectOutputStream
和ObjectInputStream
的原因。他们知道如何相互理解。