我试图弄清楚如何多次调用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);
}
谢谢。
最佳答案
这不是未知的,它存储在流中。所有必需的数据都存储在流中,以允许ObjectInputStream
正确地读回它。
这也是为什么您需要同时使用ObjectOutputStream
和ObjectInputStream
的原因。他们知道如何互相了解。
关于java - 类型的未知长度会给ObjectInputStream.readObject()带来麻烦吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47434989/