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

时间:2012-07-18 15:36:08

标签: java io byte

我试图找出如何使用java获取二进制文件中的特定字节。我已经对字节级操作进行了大量阅读,并让自己彻底搞砸了。现在我可以遍历文件,如下面的代码所示,并告诉它停在我想要的字节。但是我知道这是吝啬的,并且有一种'正确'的方式来做到这一点。

所以例如,如果我有一个文件,我需要从off-set 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 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:2)

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

虽然要注意:

  

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

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

long skipped = in.skip(byteOffset);
if(skipped < byteOffset){ 
    // Error (not enough bytes skipped) 
}

答案 2 :(得分:0)

使用RandomAccessFile - 请参阅this question