Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java DataOutputStream类在所有输出相同的内容时都提供write()、writeInt()_Java_File_Dataoutputstream - Fatal编程技术网

为什么Java DataOutputStream类在所有输出相同的内容时都提供write()、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

数据输出流类声称以可移植的方式将原始Java数据类型写入输出流。它为各自的数据类型提供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();  
我预计输出为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数据值,然后将其读回。例如:

  • write(int)
    :将指定字节(参数b的低位8位)写入底层输出流

  • writeChar(int)
    :将字符作为2字节值写入底层输出流,高字节优先

  • writeInt(int)
    :将int作为四个字节写入底层输出流,首先是高字节

有关更多详细信息,请参阅


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

“如果writeInt(65)和write(65)将相同的数据输出到文件”:它们不会。输出不尽相同,这就是为什么提供了不同的方法,而您对相反的看法是毫无根据的。然后请解释3种不同方法的输出“A”。十六进制输出为
0x41 0x00 0x00 0x00 0x41 0x00 0x41
DataOutputStream
不会生成文本文件,所以关于这个问题的所有内容都是错误的,甚至包括您的文件名。阅读javadoc。它详细地解释了两种方法之间的区别。很好,谢谢你额外的最后一行注释,它现在有意义了。。。
 java YourDemoApp 
 od -x yourOutputFile