1

を呼び出す場合、が指数関数的に大きくread(byte[])FileInputStreamも、読み取りサイズは常に 8kです。byte[]

呼び出しごとに返される最大読み取り量を増やすにはどうすればよいですか?

の制限を単に隠す方法を提案しないでくださいFileInputStream


更新:これに対する実際の解決策はないようです。ただし、私のシステムでは、1G ファイルの場合、メソッド呼び出しのオーバーヘッドを約 226uS と計算しました。これが実際にパフォーマンスに影響を与えることはないと言って差し支えありません。

4

3 に答える 3

1

バッファサイズを指定できる BufferedInputStream にラップします。

于 2011-01-26T03:46:18.010 に答える
1

NIO を使用してファイルをメモリ マップすることもできますが、8K の何が問題なのかわかりません。8K をより大きな配列にコピーするか、返された長さを使用して呼び出すことができます

public int read(byte[] b,
                int off,
                int len)
         throws IOException

off は最後の読み取りからの戻り値です。

于 2011-01-26T03:52:50.993 に答える
0

表示される各読み取りのサイズは、オペレーティング システム自体が使用するバッファー サイズである可能性があります。そのため、OS レベルで変更を加える必要がある場合があります。それをどのように行うかは、システムに依存します。ファイル システムの作成時にブロック サイズを指定できる場合があります。これは伝統的に Unix ファイルシステムで可能でした。皮肉なことに、この機能は、多くの小さなファイルを持つことが予想されるファイルシステムの小さなブロックを持つために使用されていたと思います。

于 2013-07-11T20:28:54.847 に答える