Java 为什么DataOutputStream的writeByte()和ObjectOutputStream的writeByte()写入的字节不同?
因为writeByte()在两个类中的用途相同。但两者都写了不同的内容Java 为什么DataOutputStream的writeByte()和ObjectOutputStream的writeByte()写入的字节不同?,java,io,objectoutputstream,dataoutputstream,Java,Io,Objectoutputstream,Dataoutputstream,因为writeByte()在两个类中的用途相同。但两者都写了不同的内容 import java.io.*; class First { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("b.txt"); Line 1: ObjectOutputStream o
import java.io.*;
class First
{
public static void main(String[] args) throws IOException
{
FileOutputStream fos = new FileOutputStream("b.txt");
Line 1: ObjectOutputStream oos = new ObjectOutputStream(fos);
Line 2: DataOutputStream oos = new DataOutputStream(fos);
oos.writeByte(65);
oos.close();
FileInputStream fis = new FileInputStream("b.txt");
int x=0;
System.out.println("Output");
while((x=fis.read())!=-1)
{
System.out.println(x);
}
fis.close();
}
}
如果注释掉第1行,则输出为:
65
172
237
0
5
119
1
65
如果第2行被注释掉,则输出为:
65
172
237
0
5
119
1
65
为什么会有这种差异?对象流用于写入对象。这意味着它有格式信息来说明您编写的内容以及您编写的数据。对象流在开始处还有一个标头,用于检查数据是否为对象流 数据流只写入您要求它写入的数据。没有额外的信息
顺便说一句,如果您想查看写入流的内容,您可以通过tearrayoutputstream写入
并在完成后调用toByteArray()
。无需将其写入文件,您必须读回。阅读文章的最后一段。最重要的是,您的代码缺少所有必要的close
语句。应该有更多的输出。ObjectOutputStream
应该以0xAC和流头的其余部分开始,并以字节65结束。您忘记关闭输出流了。@EJP谢谢,我更正了它。