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

を使用してくださいRandomAccessFile-この質問を参照してください。

于 2012-07-18T15:40:14.853 に答える