0

仕事で実装を求められている新しいファイル形式に問題があります。

基本的に、ファイルは UTC-8 のデータに関する情報を含む一連のヘッダーを含むテキスト ファイルであり、ファイルの残りの部分はバイナリの数値データです。データを書き込んで読み返すことができ、最近、ヘッダーを書き込むコードを追加しました。問題は、テキスト データとバイナリ データの両方を含むファイルを読み取る方法がわからないことです。ヘッダー情報 (かなり広範囲) を読み込んで処理し、ヘッダーを繰り返し処理することなくバイナリ データを読み続けられるようにしたいと考えています。これは可能ですか?

現在FileInputStream、バイナリ データの読み取りに a を使用していますが、ファイル全体の先頭ではなく、データの先頭から開始する方法がわかりません。FileInputStreamのコンストラクターの1 つがFileDescriptor引数として a を取り、それが私の答えだと思いますが、別のファイル読み取りクラスから a を取得する方法がわかりません。私はこれに正しく取り組んでいますか?

4

1 に答える 1

0

そのチャネルを経由して取得し、そのチャネルで呼び出すことFileInputStreamにより、任意のポイントにa を再配置できます。getChannel()position()

1 つの注意点は、この位置がストリームのすべてのコンシューマーに影響することです。同じファイルの異なる部分から読み取る異なるスレッドがある場合 (たとえば) には適していません。その場合は、FileInputStreamコンシューマごとに個別に作成してください。

また、この手法は、基になるファイルにランダムにアクセスできるため、ファイルストリームに対してのみ機能します。ソケット、名前付きパイプ、または実際にストリームであるその他のものに相当するものはありません。

于 2013-03-20T18:24:56.877 に答える