为什么相同数据的`DataOutputStream`和`ObjectOutputStream`的输出不同?

时间:2017-11-22 12:27:58

标签: java

我正在尝试将DataOutputStreamObjectOutputStream的输出与要输出的相同数据进行比较:

Random random = new Random();
int[] numbers = new int[100];
for (int i=0; i<100; i++){
    numbers[i] = random.nextInt();
}

System.out.println("Output");
try(FileOutputStream fout = new FileOutputStream("Object.txt");
    ObjectOutputStream oout = new ObjectOutputStream(fout)){
    oout.writeObject(numbers);
} catch (IOException e){
    System.err.println(e);
}

System.out.println("Output");
try(FileOutputStream fout = new FileOutputStream("Data.txt");
    DataOutputStream dout = new DataOutputStream(fout)){
    for (int i=0; i<100; i++){
        dout.writeInt(numbers[i]);
    }
} catch (IOException e){
    System.err.println(e);
}

为什么他们创建的文件不同?

$ diff Data.txt Object.txt 
Binary files Data.txt and Object.txt differ

两个输出流都不能以二进制形式写入数据吗?这是不是意味着他们的输出应该相同?

感谢。

1 个答案:

答案 0 :(得分:2)

ObjectOutputStream编写可序列化的java对象。 因此,如果您使用ObjectInputputStream进行读取,它将为您提供java对象。

DataOutputStream写入字节,DataInputputStream读取字节。

例)

document.getElementById('imgid').style.height="30px";
document.getElementById('imgid').style.width='auto';

这是一个可序列化的类。

class MyClass implements Serializable {
    String myData = "Hello?";
    int myInt = 12345;
    long myLong = 12412412412L;
}

使用ObejectOutputStream,ObjectInputStream可以编写和读取java“Serializable”类对象。

DataOutputStream,DataInputStream可以写入和读取java原始值(int,boolean,char,double,float,short)

因此,如果要编写java类对象,请使用ObjectOutputStream,或者只使用DataOutputStream编写原始值。