为什么DataOutputStream的writeByte()和ObjectOutputStream的writeByte()写的字节不同?

时间:2016-10-05 13:23:11

标签: 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 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

如果第2行已注释掉,则输出为:

172
237
0
5
119
1
65

为什么会出现这种差异?

1 个答案:

答案 0 :(得分:3)

对象流用于编写对象。这意味着它具有格式化信息,可以说出您所写的内容以及您编写的数据。对象流在开始时也有一个标题,用于检查数据是否为对象流。

数据流只会写入您要求的数据。没有额外的信息。

BTW如果您想查看写入流的内容,您可以写信至ByteArrayOutputStream并在完成后致电toByteArray()。无需将其写入您必须回读的文件。