2016-09-02 2 views
0

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

Мне нужно передать большой объект (более 2 ГБ) через openmpi-java, который может использовать только прямые буферы, и я хочу использовать идеи, предложенные в качестве основы.

+2

Сериализовать его самостоятельно. Любая автоматическая операция будет медленнее. –

ответ

0

Что я делаю, это создать OutputStream, который обертывает ByteBuffer. Передайте OutputStream вашему любимому инструменту сериализации. У меня есть замена ByteBuffer, которая поддерживает это, но его легко добавить.

BTW Практически любая библиотека сериализации быстрее, чем стандартная сериализация Java.

0

концептуально; только сам JVM имеет прямой доступ к байтам в памяти, которые составляют ваш объект. Таким образом, независимо от того, какой тип инструмента сериализации вы выберете, произойдет определенное количество конверсий и копирование должно быть.

Потому что вы на самом деле просите взять поля ваших объектов и в зависимости от метаинформации скопировать их содержимое в некоторые байты. Это просто невозможно работать без копирования/преобразования.

Кроме того; Мне интересно, смотрите ли вы здесь «правильную» проблему. Сериализация сама по себе является дорогостоящей операцией. Есть много способов сделать это; и они имеют совершенно разные свойства.

Что я говорю: вы уверены, что вас беспокоит производительность? Или, может быть, вы потратили больше времени на размышления о долгосрочных последствиях использования того или иного метода сериализации. Или риски безопасности, связанные с сериализацией объектов?

Краткая история: почему вы думаете, что производительность - проблема?

Смежные вопросы