Использование Java ByteBuffer для чтения миллионов сообщений - PullRequest
3 голосов
/ 24 июля 2010

Вот моя проблема: один большой сжатый файл;миллионы сообщений.

Каждое сообщение состоит из:

***************** *************** ****************** 
* 2-byte LENGTH * * 1-byte TYPE * * N-byte PAYLOAD * , where N = (LENGTH-1).
***************** *************** ******************

В зависимости от TYPE, мне нужно прочитать несколько байтов из смещения в PAYLOAD и выбрать, принять или отклонить сообщение.

Я знаю, как делать такие вещи, используя java.io.DataInputStream, но это похоже на идеальное приложение java.nio.ByteBuffer ( см. Здесь! ).Однако мне нужна помощь в настройке.

Итак, как мне использовать ByteBuffer для чтения сообщений из моего файла gzipped?

Обновление

Полагаю, мне хотелось бы увидеть скелетную реализацию кода, которая могла бы помочь мне в правильном использовании ByteBuffer.Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 июля 2010

Извините, что не отвечаю на ваш вопрос, но я не уверен, что здесь есть какое-либо преимущество использования ByteBuffer по сравнению с DataInputStream. Возможно, вы захотите передать свой поток через GZIPInputStream для раздувания данных.

GZIPInputStream gzipInput = new GZIPInputStream(yourInputStream);
DataInputStream dataInput = new DataInputStream(gzipInput);

С помощью ByteBuffer вы, вероятно, просто оборачиваете байты, считанные из вашего входного потока, без каких-либо преимуществ.

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

Вместо того, чтобы писать все для вашего протокола на низком уровне, почему бы не использовать такую ​​библиотеку, как Mina или Netty? Они могут предоставить вам довольно простое решение.

Мина http://mina.apache.org/

Нетти http://www.jboss.org/netty

Кроме того, мы используем Mina в Red5 и у нас много разработчиков, обрабатывающих миллионы и миллионы сообщений.

...