質問

既存のファイルの任意の位置からストリームを取得したい場合があります。たとえば、101バイトから始まるファイルからの読み取り/書き込み/書き込みが必要です。そのようなものを使用しても安全ですか?

final FileInputStream fin = new FileInputStream(f);
fin.skip(100);

Javadocをスキップします 指定よりも少ないバイト数をスキップする場合があることを伝えます。それではどうすればよいですか?

役に立ちましたか?

解決

次のことはどうですか:

final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin

他のヒント

FileInputStreamを使用して書くことはできません。ファイル内の任意の場所に書き込みたい場合は、RandomAccessFileを使用する必要があります。 残念ながら、andomaccessfileをinputstream/outputstreamとして使用する簡単な方法はありません ( @aixは、inputStream/outputStreamにランダムアクセスファイルを適応させるための良い提案があるように見えます)が、オンラインで利用できるさまざまなアダプターがあります。

もう1つの選択肢は、FileChannelを使用することです。 FileChannelの位置を直接設定し、チャネルユーティリティメソッドを使用して、チャネルの上部に入力ストリーム/OutputStreamアダプターを取得できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top