我试图在要输出的相同数据上比较 DataOutputStream
和 ObjectOutputStream
的输出:
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
两个输出流不是都以二进制形式写入数据吗?这不是意味着它们的输出应该是相同的吗?
谢谢。
最佳答案
ObjectOutputStream 写入可序列化的java对象。 因此,如果您使用 ObjectInputputStream 读取,它将为您提供 java 对象。
DataOutputStream 写入字节和 DataInputputStream 读取字节。
例如)
class MyClass implements Serializable {
String myData = "Hello?";
int myInt = 12345;
long myLong = 12412412412L;
}
这是一个可序列化的类。
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("datafile"));
MyClass myClass = new MyClass();
oos.writeObject(myClass);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("datafile"));
MyClass read = (MyClass) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
使用ObejectOutputStream、ObjectInputStream,您可以编写和读取java“Serialized”类对象。
DataOutputStream、DataInputStream可以写入和读取java原始值(int、boolean、char、double、float、short)
因此,如果您想编写java类对象,请使用ObjectOutputStream,或者只是编写原始值,请使用DataOutputStream。
关于java - 为什么相同数据上 `DataOutputStream` 和 `ObjectOutputStream` 的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434742/