1

2Gb もの大きなファイルの署名を検証する必要があり、できるだけメモリ効率の良い方法で検証したいと考えています。さまざまな理由から、ファイルはすでにメモリに完全にロードされてInputStreamおり、アプリケーションによって を使用してアクセスされます。ストリーム インターフェイスを使用して署名を検証したいのですが、JCASignatureクラスのメソッドは、および関連するクラスupdateのみを受け入れます。byte[]

これを効率的に行うにはどうすればよいですか?ビーストを 2 番目のバイト配列にロードしたくありません。そうしないと、メモリ使用量が非常に高くなりますが、それ以外の場合、インターフェイスはそれをサポートしていないようです。

アップデート

問題があれば、署名アルゴリズムは SHA-1 です

4

2 に答える 2

2

一度に1ブロック(4096バイトまたは任意の便利なサイズ)の入力ストリームを読み取るだけでなく、ブロックごとにupdate()を呼び出してください。

于 2009-01-02T21:06:57.453 に答える
1

バッファーとして機能するバイト配列を作成し、InputStream から一度にバッファーを読み取り、毎回署名で update() を呼び出します。バッファが妥当なサイズであれば、あるプロセスから別のプロセスにデータを転送するのに消費される CPU 時間 (あなたが行っているのはそれだと思いますか?) は、計算時間と比較して無視できる可能性があります。ディスクから読み取る場合、CPU 使用率のごくわずかなリターンのカットオフ ポイントは約 8K のバッファ サイズのように見えます。これは多かれ少なかれあなたのケースにも当てはまると思います。(興味深い場合は、私がまとめたInputStream バッファー サイズのページを参照してください。)

于 2009-01-02T23:58:43.830 に答える