0

まず、私の英語とメッセージの長さについて申し訳ありません。

私は、スキーマ ファイルと秘密のイメージを取得し、スキーマに含まれる情報を使用して n 個のイメージを作成する学校プロジェクトのビジュアル暗号化用の Java で単純なアプリケーションを作成しています。

シークレット イメージの各ピクセルに対して、アプリケーションはスキーマ ファイル内のマトリックスを検索し、n 個の共有 (共有ごとに 1 行) に m 個のピクセルを書き込みます。

スキーマ ファイルには、エンコードに必要なすべての色の行列 (n*m) が含まれており、次のように構成されています。

コレクション カラー 1
スタート マトリックス 1
RGB
GBR
BGR
エンド
スタート マトリックス 2
.....
コレクション カラー 2
スタート マトリックス 1
XXX
XXX
XXX
エンド
......
//

このファイルは数行から数千行になる可能性があるため、行列をアプリケーションに保存することはできませんが、常にファイルを読み取る必要があります。

パフォーマンスをテストするために、単純に行列を行ごとに検索するパーサーを作成しましたが、非常に遅いです。

各マトリックスの行番号を保存してから、 RandomAccessFile を使用してそれを読み取ると思っていましたが、これを行うためのより強力な方法があるかどうか知りたいと思っていました。

ありがとう

4

2 に答える 2

1

全部をRAMにロードする能力を超える大規模で大規模な入力ファイルを本当に扱っている場合は、MapDBのような永続的なキー/値ストアを使用するのが簡単な方法かもしれません。ファイルを1回解析し、効率的な[Collection +Color]->Matrixマップを作成します。それを永続的なHTreeに保存します。これで、すべてのキャッシュなどが処理されます。Collection + Colorタプル用の優れたハッシュ関数を作成してください。これは、非常にパフォーマンスが高いはずです。

データアクセスパターンがまとまりがちな場合は、B + Treeインデックスに格納する方が速い場合があります。それを試して、何が最適かを確認できます。

于 2012-12-23T19:15:48.550 に答える
0

スキーマ ファイルの場合は、a を使用してそれFileChannelを呼び出します.map()。少しの努力で、必要なオフセットをファイルのマップされた表現に計算して使用したり、このマッピングをカスタム構造にカプセル化することさえできます。

于 2012-12-23T17:31:24.683 に答える