2

我试图弄清楚如何使用 java 获取二进制文件中的特定字节。我已经阅读了大量有关字节级操作的内容,并且让自己彻底困惑了。现在我可以遍历一个文件,如下面的代码,并告诉它在我想要的字节处停止。但是我知道这是笨拙的,并且有一种“正确”的方法可以做到这一点。

因此,例如,如果我有一个文件并且我需要从偏移量 000400 返回字节,我该如何从 FileInputStream 中获取它?

public ByteLab() throws FileNotFoundException, IOException {
        String s = "/Volumes/Staging/Imaging_Workflow/B.Needs_Metadata/M1126/M1126-0001.001";
        File file = new File(s);
        FileInputStream in = new FileInputStream(file);
        int read;
        int count = 0;
        while((read = in.read()) != -1){          
            System.out.println(Integer.toHexString(count) + ": " + Integer.toHexString(read) + "\t");
            count++;
        }
    }

谢谢

4

3 回答 3

13

你需要RandomAccessFile这份工作。您可以通过方法设置偏移量seek()

RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(400); // Goes to 400th byte.
// ...
于 2012-07-18T15:39:16.943 回答
2

您可以使用skip()FileInputStream 的方法来“跳过 n 个字节”。

尽管请注意:

由于各种原因,skip 方法最终可能会跳过一些较小的字节数,可能是 0。

它返回跳过的实际字节数,因此您应该使用以下内容进行检查:

long skipped = in.skip(byteOffset);
if(skipped < byteOffset){ 
    // Error (not enough bytes skipped) 
}
于 2012-07-18T15:39:22.807 回答
0

使用 a RandomAccessFile- 请参阅此问题

于 2012-07-18T15:40:14.853 回答