簡體   English   中英

使用 Java 從二進制文件中讀取 integer 值

[英]Reading integer values from binary file using Java

我正在嘗試使用DataOupPutStream.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);
}

我運行此代碼段時的 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

但是當我在調試模式下運行時,我得到以下 output:

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() 方法與其他方法一樣。 您將收到 EOFException,因為這是 readInt() 的 Javadoc 所說的,當您到達文件末尾時會發生這種情況。


當我跑

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM