为什么Java DataOutputStream类在所有输出相同的内容时都提供write()、writeInt()
数据输出流类声称以可移植的方式将原始Java数据类型写入输出流。它为各自的数据类型提供writeInt和其他方法,但如果writeInt(65)和write(65)将相同的数据输出到文件,那么writeInt的区别和用途是什么为什么Java DataOutputStream类在所有输出相同的内容时都提供write()、writeInt(),java,file,dataoutputstream,Java,File,Dataoutputstream,数据输出流类声称以可移植的方式将原始Java数据类型写入输出流。它为各自的数据类型提供writeInt和其他方法,但如果writeInt(65)和write(65)将相同的数据输出到文件,那么writeInt的区别和用途是什么 FileOutputStream file = new FileOutputStream("D:\\newfile.txt"); DataOutputStream data = new DataOutputStream(file); data.w
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();
我预计输出为65 A,但实际输出为A
我知道如果我们必须将整数输出为65,我们必须使用write(65+“”),但是writeInt()的用途是什么 您对输出的看法是错误的。事实上根据javadoc。。。输出将为以下7字节序列
0x41 0x00 0x00 0x00 0x41 0x00 0x41
将其写入文本控制台(UTF-8或拉丁语-1作为字符编码)时,0x41呈现为a
,0x00值为NUL
控制字符NUL
是非打印字符,并且。。。当然。。。你看不见
因此,它在典型控制台上呈现为AAA
。但这误导了你
如果像这样运行Java代码段(在Linux、Unix上,可能还有MacOS上),您可以更清楚地看到这一点
您真正的问题是您误解了
DataOutputStream
和(暗示地)DataInputStream
的目的。它们的目的是以二进制形式编写Java数据值,然后将其读回。例如:
:将指定字节(参数b的低位8位)写入底层输出流write(int)
:将字符作为2字节值写入底层输出流,高字节优先writeChar(int)
:将int作为四个字节写入底层输出流,首先是高字节writeInt(int)
DataOutputStream
的输出不打算使用文本编辑器读取或写入控制台。(如果这是您的意图,您应该使用编写器
或打印编写器
)“如果writeInt(65)和write(65)将相同的数据输出到文件”:它们不会。输出不尽相同,这就是为什么提供了不同的方法,而您对相反的看法是毫无根据的。然后请解释3种不同方法的输出“A”。十六进制输出为0x41 0x00 0x00 0x00 0x41 0x00 0x41
DataOutputStream
不会生成文本文件,所以关于这个问题的所有内容都是错误的,甚至包括您的文件名。阅读javadoc。它详细地解释了两种方法之间的区别。很好,谢谢你额外的最后一行注释,它现在有意义了。。。
java YourDemoApp
od -x yourOutputFile