java - 为什么 DataOutputStream 的 writeByte() 和 ObjectOutputStream 的 writeByte() 写入的字节不一样?

标签 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();
        }
}

如果第一行被注释掉,输出为:

65

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

172
237
0
5
119
1
65

为什么会有这种差异?

最佳答案

对象流用于写入对象。这意味着它有格式化信息来说明你写了什么以及你写的数据。 Object Streams 在开头也有一个 header ,用于检查数据是否为 ​​Object Stream。

Data Streams 只写​​入您要求的数据。没有额外的信息。

顺便说一句,如果您想查看写入 Stream 的内容,您可以写入 ByteArrayOutputStream 并在完成后调用 toByteArray()。无需将其写入必须读回的文件。

关于java - 为什么 DataOutputStream 的 writeByte() 和 ObjectOutputStream 的 writeByte() 写入的字节不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875192/

相关文章:

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - JSPServlet : URI remains that of controller servlet

java - 如何判断文件是否已打开以在 Android 中进行读/写?

java - 如何让我的程序识别给定字符串中的字符串和整数?

python - 在 Python 3 中逐行读取文件时捕获 UnicodeDecodeError 异常

java - Mockito 模拟 ObjectOutputStream.writeObject 时出现 NullPointerException?

java - 当必须接受许多连接时,客户端/服务器类型应用程序中的Java套接字出现问题

java - Java 的 ObjectOutputStream 的 writeObject() 方法如何用于数组?

java - 为什么这种类型的继承有效?

java - Wicket - 用户数据国际化