我试图弄清楚如何多次调用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正确地读回它。

这也是为什么您需要同时使用ObjectOutputStreamObjectInputStream的原因。他们知道如何互相了解。

关于java - 类型的未知长度会给ObjectInputStream.readObject()带来麻烦吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47434989/

10-10 19:49