【发布时间】:2020-12-13 06:25:04
【问题描述】:
我正在使用 Java 的 FileInputStream.read() 一次一个字节地读取二进制文件,并通过增加变量 i 来跟踪文件中的位置。我正在寻找一个特定的字符,并且对于二进制文件的第一部分,返回正确的偏移量。
但是,在文件的后面,偏移量(由i 发现)开始从文件中的实际偏移量开始减少。 (例如,0x4c5 的字符被误读为0x4c3。)因此,FileInputStream.read() 似乎跳过了字节。逐渐地,i 明显小于实际文件偏移量(到最后,它减少了 60 个字节)。
这是我的一些代码。
in = new FileReader(path);
int c = 0;
int i = -1;
while (c != -1) {
i++;
try {
c = in.read();
if (c == 0x47) {
print("Found G at 0x" + Integer.toHexString(i));
}
} catch(IOException e) ...
这可能是什么原因造成的?此外,如何避免这种情况?
【问题讨论】:
-
对二进制文件使用 FileInputStream。
-
“我正在使用 Java 的
FileInputStream.read()一次一个字节地读取二进制文件...” - 这不是您向我们展示的代码所做的。这可能是您的问题(IMO)的原因。如果没有,您需要向我们展示一个 minimal reproducible example,以证明您的真正问题。 -
除非你正在阅读一个文本文件(阅读器是基于文本的)所以 c 可能是两个字节。
标签: java file-io binaryfiles