Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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从二进制文件读取整数值_Java_File Io_Binaryfiles_Java Io - Fatal编程技术网

使用Java从二进制文件读取整数值

使用Java从二进制文件读取整数值,java,file-io,binaryfiles,java-io,Java,File Io,Binaryfiles,Java Io,我正在尝试使用dataoutputstream.write()方法写入大于256的值。当我尝试使用DataInputStream.read()读取相同的值时,它将返回0。因此,我使用了DataOutputStream.writeInt()和DataInputStream.readInt()方法来写入和检索大于256的值,并且工作正常 参考下面的代码片段,我想知道编译器在while语句中的in.readInt()中的行为 FileOutputStream fout = new FileOutput

我正在尝试使用
dataoutputstream.write()
方法写入大于256的值。当我尝试使用
DataInputStream.read()
读取相同的值时,它将返回0。因此,我使用了
DataOutputStream.writeInt()
DataInputStream.readInt()
方法来写入和检索大于256的值,并且工作正常

参考下面的代码片段,我想知道编译器在
while
语句中的
in.readInt()
中的行为

FileOutputStream fout = new FileOutputStream("T.txt");
BufferedOutputStream buffOut = new BufferedOutputStream(fout);
DataOutputStream out = new DataOutputStream(fout);

Integer output = 0;
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();

FileInputStream fin = new FileInputStream("T.txt");
DataInputStream in = new DataInputStream(fin);

while ((output = in.readInt()) > 0) {
    System.out.println(output);
}
运行此代码段时的输出为:

Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)
257
2
2123
223
2132
但当我在调试模式下运行时,我得到以下输出:

2123
223
2132
Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)
readInt()方法与其他方法一样。您将得到一个EOFEException,因为Javadoc for readInt()说,当您到达文件末尾时,将发生此情况


当我跑的时候

DataOutputStream out = new DataOutputStream(new FileOutputStream("T.txt"));
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();

DataInputStream in = new DataInputStream(new FileInputStream("T.txt"));
try {
    while (true) 
        System.out.println(in.readInt());
} catch (EOFException ignored) {
    System.out.println("[EOF]");
}
in.close();
我在正常和调试模式下得到这个

257
2
2123
223
2132
[EOF]

谢谢你,彼得。例外情况很好。但结果在调试模式和运行模式下有所不同。写入System.out和System.err(写入异常时)时,输出顺序不一致/始终相同。使用调试就足以改变输出的顺序。是的。。但在调试模式下,读取的值也不同。假设我删除代码段中的while子句并替换为5 System.out.println(in.readInt())@rozar,while条款没有区别。很可能是调试是正确的,而您做错了什么。@Peter,谢谢您的回复,我非常感谢。除了EOFEException处理之外,您能在我上面的代码片段中找到任何错误吗。