0

常に更新されている非常に大きなファイルからデータの小さなサブセットをプロットする処理スクリプトがあります。データはユーザー入力に基づいてランダムにアクセスされるため、ファイル全体をメモリにロードせずに速度を上げるために、ファイルを ByteBuffer としてメモリ マッピングしています。これはローカル マシンで実行すると非常にうまく機能しますが、残念ながらプロジェクトの最終目標は Web アプレットです。アプレット内でアクセスされるファイルからメモリ マップドまたはランダム アクセス ファイル構造を作成する良い方法はありますか? URL.openStream() をよく調べましたが、InputStream を必要なものに変換する方法がわかりませんでした。これが私がオフラインアプリのために持っていたものです:

//within my GraphicPlot class:

ByteBuffer bbuf;
FileChannel fc;

SetUpPlot(String fileName){    
  try {
    FileInputStream instream = new FileInputStream(fileName);
    fc = instream.getChannel();
    bbuf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
  }
  catch (IOException e) { 
   e.printStackTrace();
   exit();
  } 
}

どのように URL を関数 (絶対 URL、相対 URL など) に送信しても、ファイルが見つからないというエラーが発生します。

どんな助けでも大歓迎です!

編集:アプレットは署名され、問題のファイルはアプレットと同じディレクトリにホストされるため、アプレットのアクセス許可の問題は発生しないはずです。

4

1 に答える 1

0

FileInputStreamとメモリマッピングは、ローカルシステム上のファイルに対してのみ機能します。httpまたは他のプロトコルを介してのみ利用可能なファイルをメモリマップすることはできません。FileInputStreamまたはメモリマッピングを使用するには、最初にローカルシステムでコピーを作成する必要があります。

これはJavaの制限ではなく、オペレーティングシステムの制限です。

于 2012-07-18T05:53:40.007 に答える