1

変更できない2つのインターフェイス間にラッパーを実装する必要があります。基本的に、ラッパーはJavaスタイルのストリーミングファイルアクセスを標準のCスタイルのfopen / fread / fwrite /ファイルアクセス(Javaで実装)に変換する必要があります。

ラッパーは、呼び出し元が必要とするランダムなファイルアクセスメソッドを実装する必要があります。つまり、オープン/読み取り/書き込み/クローズ/シーク/フラッシュ/サイズ/切り捨てを意味します。ラッパーは、呼び出し元にフィードするために一連の標準Javaファイルストリーミングメソッドを呼び出す必要があります。呼び出し先は、inputstreamとoutputsteamを提供します。

java.io.RandomAccessFileを見ました。これは、CスタイルをJavaストリームスタイルに変換します。何かを逆にする必要があります。最も難しい部分はseek()です。それを行うための良い(効率的な)方法はありますか?

4

2 に答える 2

0

ストリームへのランダム アクセスを取得する唯一の方法は、ストリームをメモリに (またはディスク上のコピーとして) バッファリングすることです。

どちらかをお勧めします

  • それを ByteArrayOutputStream に読み込み、それをbyte[]
  • ストリームを一時ファイル (できれば tmpfs または RAM ドライブ) にコピーし、その上で RandomAccessFile を使用します。
于 2012-08-08T17:09:52.883 に答える
-2

これは、Channels ユーティリティ クラスを使用して簡単に実現できます...

// STEP 1:  Create random access file read-only
RandomAccessFile raf = new RandomAccessFile("/text.txt", "r");

// STEP 2:  Use Channels to convert to InputStream
InputStream is = Channels.newInputStream(raf.getChannel());
于 2015-01-29T19:13:12.047 に答える