Java / Android - быстрый анализ байтового буфера - PullRequest
7 голосов
/ 28 октября 2011

Я пишу веб-сервер для мобильных устройств на базе Android в Java.

Этот веб-сервер является однопоточным и следует идее, лежащей в основе nginx, node.js и аналогичных: не создавайте несколько потоков, просто используйтеАсинхронные операции в цикле обработки событий.

Хотя использование многопоточного веб-сервера может повысить производительность на современных процессорах x86, одноядерному процессору на уровне рук потребуется выполнить гораздо больше работы.

Чтобы уточнить, я достаточно хорошо знаю C, и я реализовал однопоточные веб-серверы на простом c или многопоточные на C #, используя преимущества IOPS для Windows, но я написал только простой веб-сервер на Java, который я хочузамените его новым.

Сейчас я использую java nio и считал, что ByteBuffer работает довольно медленно при преобразовании в строку, но это не проблема, потому что мне не нужно делатьНа самом деле, я хочу реализовать синтаксический анализ и сравнение на уровне байтов.

Мой вопрос: какой метод анализа байтового буферабыстрее?

Я видел, что ByteBuffer поддерживает метод get, который дает доступ к одному байту и перемещает курсор вперед, поддерживает метод массива, который возвращает массив поддержки, поэтому мой вопрос в том, какой метод быстрее?

Я могу работать непосредственно с массивом с резервной копией, или мне следует избегать и использовать get?

Я хочу реализовать ByteBufferPool для повторного использования байтового буфера, я сделаю это с учетом потоков, читайте ниже,это может быть проблемой?

В некоторых случаях я буду сравнивать байт с байтом, применяя маску для обработки чувствительности к регистру (я имею в виду, если первый байт равен G, третий - T, а четвертый - пробел).(0x47, 0x54 и 0x20) я могу рассматривать запрос как запрос GET), а в других случаях мне нужно будет сравнивать строки с байтовым массивом, например, для заголовков (я буду перебирать строковые символы, приводить их к байтам и сравниватьв байты).

Извините за эти глупые вопросы, но я не знаю спецификаций Java и не знаю внутренних вещей Java, поэтому мне нужна информация:)

Кто-то может дать подсказку?:)

PS: очевидно, что не все операции могут быть обработаны способом do-stuff-pause-continue-return, поэтому я буду реализовывать ThreadPool, чтобы избежать штрафа за создание потока

1 Ответ

1 голос
/ 16 января 2012

Дайте Нетти попробовать.Вы можете управлять моделью потоков и реализовывать только то, что вам нужно.

...