Так что, если обработка требует перехода в данные для нескольких файлов и нескольких буферов? Постоянное открытие и закрытие бинарных файлов станет дорогим?
Я большой поклонник 'сопоставления памяти ввода / вывода' , или 'прямых байтовых буферов' . В Java они называются Mapped Byte Buffers являются частью java.nio. (По сути, этот механизм использует систему подкачки виртуальной памяти ОС, чтобы «отобразить» ваши файлы и представить их программно в виде байтовых буферов. ОС будет управлять перемещением байтов на / с диска и памяти автоматически и очень быстро.
Я предлагаю этот подход, потому что а) он работает для меня, и б) он позволит вам сосредоточиться на вашем алгоритме и позволит JVM, ОС и аппаратному обеспечению заниматься оптимизацией производительности. Все часто они знают, что лучше, чем мы, смиренные программисты. ;)
Как бы вы использовали MBB в вашем контексте? Просто создайте MBB для каждого из ваших файлов и читайте их по своему усмотрению. Вам нужно будет только сохранить свои результаты. .
Кстати: сколько данных вы имеете в ГБ? Если оно превышает 3-4 ГБ, это не сработает для вас на 32-разрядной машине, поскольку реализация архитектуры MBB ответственно в области адресуемой памяти в архитектуре платформы. 64-разрядная машина и операционная система приведут вас к 1 ТБ или 128 ТБ сопоставляемых данных.
Если вы думаете о производительности, то знайте Кирка Пеппердина (несколько известного гуру Java-производительности). Он связан с веб-сайтом www.JavaPerformanceTuning.com, на котором есть еще несколько деталей MBB: NIO Советы по повышению производительности и другие вопросы, связанные с производительностью Java.