一个类型的未知长度可能是'ObjectInputStream.readObject()`的麻烦吗?

时间:2017-11-22 12:40:11

标签: java

我试图找出对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);
}

感谢。

1 个答案:

答案 0 :(得分:1)

它不是未知,它存储在流中。所有必要的数据都存储在流中,以允许ObjectInputStream正确读取它。

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