2011-10-18 7 views
1

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

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

Skip javadocは、指定されたバイト数よりも少ないバイト数をスキップすることがあります。 それではどうしたらいいですか?

答えて

1

方法:のRandomAccessFileの方向に私を指しているため

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

FileInputStreamを使用して書き込むことはできません。ファイル内の任意の場所に書き込む場合は、RandomAccessFileを使用する必要があります。 残念ながら、RandomAccessFileをInputStream/OutputStream として使用する簡単な方法はありません(@aixはRandomAccessFileをInputStream/OutputStreamに適合させるための良い提案があるようです)が、オンラインで利用できるさまざまなサンプルアダプタがあります。

別の方法として、FileChannelを使用する方法があります。 FileChannelの位置を直接設定してから、Channelsユーティリティー・メソッドを使用して、InputStream/OutputStreamアダプターをチャネルの上に取得することができます。以下について

+0

感謝。最終的にはRandomAccessFileが私の必要なすべてでしたが、@ aixは私が探していた正確な答えを与えました。 – Vic

関連する問題