У меня есть следующий (довольно неприятный) фрагмент кода, который генерирует хэш md5 для содержимого элемента:
protected String createHashFromContentNew() throws CrawlerException {
final StringBuilder builder = new StringBuilder();
if (getContent() != null) {
builder.append(new String(getContent()));
}
if (builder.length() == 0) {
throw new CrawlerException(hashErrorMessage("the content of this item is empty!"));
} else {
return MD5Utils.generateMD5Hash(builder.toString());
}
}
функцию MD5Utils.generateMD5Hash(builder.toString());
можно также использовать с InputStream
.
getContent()
возвращает byte[]
.
Это работало нормально, пока я не получил предметы с огромным размером содержимого.Поскольку он используется в многопоточной среде, он использует много оперативной памяти, удерживая содержимое несколько раз.
Теперь я хочу использовать generateMD5Hash()
с InputStream, чтобы прекратить загрузку всего в ОЗУ.,Проблема в том, что исходящий хеш должен быть таким же, как в текущей функции для всех ранее сгенерированных хешей.
Есть идеи, как добиться этого надлежащим образом?