Эффективно проверяйте подпись на больших наборах данных с помощью JCA - PullRequest
1 голос
/ 02 января 2009

Я должен проверить подпись в файле размером до 2 ГБ, и я хочу сделать это как можно более эффективным с точки зрения памяти способом. По разным причинам файл уже будет полностью загружен в память и доступен приложению с помощью InputStream. Я хотел бы проверить подпись, используя интерфейс потока, но метод JCA Signature class 'update принимает только byte[] и связанные классы.

Как я могу сделать это эффективно? Я не хочу загружать зверя во второй байтовый массив, в противном случае мы увидим серьезное использование памяти, но интерфейс, похоже, не поддерживает его в противном случае.

Обновление

Если это имеет значение, алгоритм подписи SHA-1

Ответы [ 2 ]

2 голосов
/ 03 января 2009

Почему бы просто не прочитать поток ввода блоком (4096 байт или любым другим удобным размером) за раз, вызвать update () для каждого блока.

1 голос
/ 03 января 2009

Создайте байтовый массив, который будет действовать как буфер , и одновременно считывайте буфер из InputStream, каждый раз вызывая update () для Signature. При условии, что буфер имеет разумный размер, процессорное время, затрачиваемое на передачу данных из одного процесса в другой (я полагаю, это то, что вы делаете?), Вероятно, будет незначительным по сравнению со временем вычисления. В случае чтения с диска пороговая точка для незначительной отдачи от использования ЦП, по-видимому, имеет размер буфера около 8 КБ, и я подозреваю, что это будет более или менее применимо и в вашем случае. (В случае, если это интересно, см. Страницу, которую я собрал на Размеры буфера InputStream .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...