为什么 Java DataOutputStream Class 提供 write() , writeInt() 当所有输出相同的东西

why does Java DataOutputStream Class provide write() , writeInt() when all outputs the same thing

数据输出流 class 声称将原始 Java 数据类型写入可移植的输出流 way.And 它为它们各自的数据类型提供了 writeInt 和其他方法,但是如果 writeInt (65) 和 write(65) 输出相同的数据到文件 那么 writeInt

的区别和用途是什么
   FileOutputStream file = new FileOutputStream("D:\newfile.txt");  
   DataOutputStream data = new DataOutputStream(file);  
   data.write(65);
   data.writeInt(65);
   data.writeChar(65);
   data.flush();  
   data.close();  

我期望输出为 A 65 A,但实际输出为 A A A。

我知道如果我们必须将整数输出为 65 我们必须使用 write(65+"") 但是 writeInt() 有什么用;

你对输出有误。事实上...根据javadoc ...输出将是以下7字节序列

0x41 0x00 0x00 0x00 0x41 0x00 0x41

当您将其写入文本控制台(使用 UTF-8 或 Latin-1 作为字符编码)时,0x41 呈现为 A,而 0x00 值是 NUL 控制字符。 NUL 是一个非打印字符,并且......自然......你看不到它。

因此,它 在典型控制台上将 呈现为 AAA。但这是在误导你。

如果您像这样 运行 您的 Java 片段(在 Linux、Unix 和可能还有 MacOS 上),您可以更清楚地看到这一点

 java YourDemoApp 
 od -x yourOutputFile

你真正的问题是你误解了 DataOutputStream 和(暗示)DataInputStream 的目的。它们的目的是以二进制形式写入Java数据值,然后读回它们。例如:

  • write(int) :将指定字节(参数 b 的低八位)写入基础输出流。

  • writeChar(int) :将 char 作为 2 字节值写入底层输出流,高字节在前。

  • writeInt(int) :将 int 作为四个字节写入基础输出流,高字节在前。

有关详细信息,请参阅 javadoc

DataOutputStream 的输出不打算 使用文本编辑器读取或写入控制台。 (如果这是你的意图,你应该使用 WriterPrintWriter。)