Эффективная сериализация нативных массивов java с java.io - PullRequest
1 голос
/ 12 сентября 2011

У меня вопрос об эффективной сериализации с java.io.Эффективен в основном с точки зрения времени вычислений.Какой самый быстрый способ сериализации и десериализации собственных массивов, таких как long [], int [], short [] и т. Д. На диск?

Мои массивы имеют размер от 100 до 600 МБ.Что я могу сделать, это, конечно, использовать свой аутстрим с out.writeInt (...) и out.readInt (...), но я предполагаю, что должен быть более быстрый (буферизованный ?!) способ, поскольку я знаю, что это так.чтение в полном массиве.

Все, что я знаю, это то, что фреймворк дает мне DataInput, который может быть приведен к InputStream.Остальное обрабатывается моим фреймворком.

Заранее спасибо,

Eeth

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

К сожалению, есть только один метод для каждого типа с DataInput, который является readLong и т. Д.

Если бы вы могли использовать файлы с отображением в памяти и собственный порядок байтов, это было бы намного более эффективным во всех отношениях.

В предыдущих тестах, которые я проводил, чтение long с отображенным в память ByteBuffer (с собственным порядком байтов) было в 6 раз быстрее, чем при использовании DataInputStream.

Фактически синтаксический анализ текста из ByteBuffer был быстрее, чем использование DataInputStream для чтения двоичного файла. : P

http://vanillajava.blogspot.com/2011/06/writing-human-readable-data-faster-than.html

0 голосов
/ 13 сентября 2011

В случае, если вы не хотите придерживаться Java-сериализации, для этого конкретного варианта использования Ascii Serialization также звучит хорошо.

Выберите простой формат для данных и используйте Buffered Writer / Reader для сериализации / десериализации. Могу поспорить, что это будет быстрее, чем с использованием сериализации Java.

Кроме того, вы получаете дополнительное преимущество в том, что вы можете видеть свои сериализованные данные.

...