从二进制文件中读取特定的字节

3
我正在尝试使用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++;
        }
    }

谢谢

3个回答

14

你需要使用RandomAccessFile来完成任务。你可以通过seek()方法设置偏移量。

RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(400); // Goes to 400th byte.
// ...

2
你可以使用 FileInputStream 的 skip() 方法来“跳过 n 个字节”。
但是请注意:

由于各种原因,skip 方法可能会跳过一些较小数量的字节,甚至可能为 0。

它返回实际跳过的字节数,所以你应该用类似下面的方式进行检查:
long skipped = in.skip(byteOffset);
if(skipped < byteOffset){ 
    // Error (not enough bytes skipped) 
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接