2016-11-14 7 views
1

私のプロジェクトでは、DataOutputStreamを使用してファイルを作成しています。私たちは、short、byte、int、longのような異なるデータ型を書いており、writeShort(),writeByte()などのそれぞれのメソッドを使用しています。DataOutputStreamを使用してオフセットに書き込む

ここでは、このファイルの1つのレコードを特定のオフセットで編集したいとします。私はそのレコードが始まるオフセットを知っていますが、オフセットをサポートするDataOutputStreamのメソッドだけがbyte[]を受け取るので、ファイルへの書き込みの正しいアプローチは何か分かりません。

上記のように異なるデータタイプの組み合わせであるレコード全体を書きたいと思います。

誰かがこれに対して正しい方法を教えてください。あなたのケースでは

+0

レコードは固定サイズですか? – Kayaman

+0

いいえ、レコードのサイズが異なります。 –

+3

"offsetをサポートするDataoutputStreamの唯一のメソッドは、バイト[]" =>メソッド[DataOutputStream#write(byte []、int、int) ']のオフセットです(https://docs.oracle.com/ write-byte:A-int-int-)は、書き込んでいる_data_のオフセットを意味し、_stream_の何らかの位置ではありません。 – Seelenvirtuose

答えて

1

、あなたはするためにRandomAccessFileを使用する必要があり、その方法seek(long pos)のおかげでを読んで、および/または書き込み与えられた場所にあるファイル内の一部のコンテンツ。例えば

try (RandomAccessFile raf = new RandomAccessFile(filePath, "rw")) { 
    raf.seek(offset); 
    // do something here 
} 

NB:方法writeShort()writeByte()等及びそれらのリードの対応はそう単独でそれを使用することで十分であるクラスRandomAccessFileから直接入手可能です。

+0

もちろん、レコードが固定サイズでない場合、途中でコンテンツを上書きするだけでファイルが破損する可能性があります。 – Kayaman

関連する問題