为什么 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
的输出不打算 使用文本编辑器读取或写入控制台。 (如果这是你的意图,你应该使用 Writer
或 PrintWriter
。)
数据输出流 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
的输出不打算 使用文本编辑器读取或写入控制台。 (如果这是你的意图,你应该使用 Writer
或 PrintWriter
。)