2013-02-08 7 views
-1

Предположим, следующий формат:быстрый способ расшифровать последовательность целых чисел

Integer1 Integer2 Integer3 Integer4 ... 

Эти двоичные числа, написанные с использованием DataInputStream. Есть 22 миллиарда из них, записанных в файл размером около 90G.

Доступная оперативная память составляет> 2 * размер файла.

Таким образом, он может легко вместиться в память. Какой будет самый быстрый подход для чтения и декодирования таких целых чисел. В настоящее время

MappedByteBuffer reads 500M numbers in time: 212.986 seconds 
DataInputStream wrapped around a BufferedInputStream reads 500M numbers in time 306.755 seconds. 
+0

Целое число '' Integer '' 4 байта (плюс накладные расходы, если они завернуты ...), * 22 миллиарда ~> 81 ГБ. О какой системе вы говорите, что вы думаете, что это может быть вписано в ОЗУ? Очевидно, вы пытаетесь использовать буфер, который должен помочь. Что такое _goal_ здесь - какую задачу вы пытаетесь выполнить? Учитывая ваш текущий курс, ожидайте, что обработка займет около 9 часов в лучшем случае ... –

ответ

2

Ответ зависит от точной комбинации JVM, ОС, оборудования и шаблонов доступа. Мартин Томпсон написал программу, которую вы можете использовать для тестирования последовательных операций ввода-вывода различными способами чтения и записи: http://mechanical-sympathy.blogspot.com/2011/12/java-sequential-io-performance.html

Завершение его теста на его платформе: используйте RandomAccessFile.