我正在尝试将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
两个输出流都不能以二进制形式写入数据吗?这是不是意味着他们的输出应该相同?
感谢。
答案 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编写原始值。