0

以下のための最良/高速の方法を教えてください:

1)非常に小さなバイナリファイルをメモリにロードします。たとえば、アイコン。

2)サイズ512Mb+の非常に大きなバイナリファイルのロード/読み取り。たぶん私はメモリマップドIOを使用する必要がありますか?

3)サイズ/速度については考えたくないが、すべてのバイトをメモリに読み込むということだけを実行する必要がある場合の一般的な選択。

ありがとうございました!!!

PSささいな質問でごめんなさい。閉じないでください;)

PS2。C#のアナログ質問のミラー。

4

2 に答える 2

5

メモリマップトファイルの場合、javaにはnioパッケージがあります。メモリマップトファイル

小さなファイルのバイトストリームクラスを確認してください:バイトストリーム

より大きなファイルについては、バッファリングされたI / Oを確認してください:バッファリングされたストリーム

于 2010-11-22T14:38:12.057 に答える
2

小さなファイルをメモリに読み込む最も簡単な方法は次のとおりです。

// Make a file object from the path name
File file=new File("mypath");
// Find the size
int size=file.length();
// Create a buffer big enough to hold the file
byte[] contents=new byte[size];
// Create an input stream from the file object
FileInputStream in=new FileInutStream(file);
// Read it all
in.read(contents);
// Close the file
in.close();

実際には、I / Oエラーが発生した場合に備えて、いくつかのtry/catchブロックが必要になります。

大きなファイルを読み取る場合、回避できる可能性がある場合は、一度にすべてをメモリに読み取らないことを強くお勧めします。それを読んで、チャンクで処理します。500MBのファイルを一度にメモリに保持する必要があるのは非常にまれなアプリケーションです。

JavaにはメモリマップドI/Oのようなものはありません。それがあなたがする必要があることであるならば、あなたはただ本当に大きなバイト配列を作成する必要があるでしょう。

于 2010-11-22T14:41:41.953 に答える