gpt4 book ai didi

java - Java 中使用 DataInputStream 读取整数

转载 作者:行者123 更新时间:2023-12-02 02:12:47 25 4
gpt4 key购买 nike

我有这个Java代码:

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class DemoApp {

public static void main(String args[]) {

try (DataInputStream dis = new DataInputStream(new FileInputStream("abc.txt"))) {

int k = dis.readInt();
System.out.println(k);
}

catch (FileNotFoundException fnfe) {

System.out.printf("ERROR: %s", fnfe);
}

catch (IOException ioe) {

System.out.printf("ERROR: %s", ioe);
}
}

}

当 abc.txt 文件包含数字 987 时,我会遇到此错误:java.io.EOFException 如果 abc.txt 文件包含数字 1234,当我运行程序时,我会得到以下结果:825373492。我只是想了解如何正是从 DataInputStream 中使用这个 readInt() 方法以及为什么我对某些数字出现此错误。谢谢!

最佳答案

DataInputStream旨在从二进制流(字节)读取字节,并且您的文本文件包含整数值的文本表示。
所以它不能工作。

您可以在DataInputStream.readInt()中找到信息javadoc:

See the general contract of the readInt method of DataInput.

哪里DataInput().readInt()

The DataInput interface provides for reading bytes from a binary stream and reconstructing from them data in any of the Java primitive types. ...

The value returned is:

(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))

987读作 57, 56, 55字节。它缺少一个字节成为 intint用 4 个字节表示。
EOFException readInt()期间抛出调用为此输入流在读取四个字节之前已到达末尾。
通过在文本文件中添加额外的数字,您可以读取 4 个字节。所以它“有效”:可以读取 4 个字节,但 1234 被读取为 49、50、51、52 ​​字节,从而产生 825373492 int 根据DataInput.readInt()规范。

要从文本文件中读取 int 值,您可以使用 Scanner例如:

try (Scanner sc = new Scanner(new File("abc.txt"))) {
int i = sc.nextInt();
System.out.println(i);
}

关于java - Java 中使用 DataInputStream 读取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49731204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com