Java 为什么DataOutputStream的writeByte()和ObjectOutputStream的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

因为writeByte()在两个类中的用途相同。但两者都写了不同的内容

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谢谢,我更正了它。