質問

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

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

更新

重要な場合、署名アルゴリズムはSHA-1です

役に立ちましたか?

解決

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top