Передача двоичных и строковых данных через поток - PullRequest
4 голосов
/ 11 октября 2011

Я провожу небольшой эксперимент с WebSockets и Java.В соответствии с последним вариантом WebSocket, сообщение может быть двоичным или простой строкой.Я использую сервер Webbit, и он имеет две функции:

public void onMessage(WebSocketConnection connection, String message) 

public void onMessage(WebSocketConnection connection, byte[] message)

Интересно, что имеет значение.Байт [] быстрее?Или почему это важно?Я могу написать все, что я пишу, с байтами, потому что даже строка состоит из байтов во время передачи, так почему у нас есть два множественных метода?Только Google Chrome 15 Beta и 16 Dev поддерживают двоичную передачу, поэтому я думал об использовании кодирования / декодирования Base64 как на клиенте, так и на сервере.Это единственная разница?Что если я просто прочитаю каждый байт, соберу их в строку и отправлю?Я думаю, единственная разница будет в том, что не все байты являются строковыми символами, поэтому я просто добавлю служебную информацию при преобразовании в строковую?

Ответы [ 2 ]

7 голосов
/ 12 октября 2011

Протокол WebSocket (HyBi) поддерживает два различных типа полезной нагрузки: текстовый и двоичный.Текстовое содержимое - это строковые данные в кодировке UTF-8.Любые коды ASCII выше 127 в отправляемой вами строке будут преобразованы в двухбайтовую кодировку UTF-8.Чтобы успешно отправлять / получать необработанные двоичные данные, вы, вероятно, захотите закодировать данные в нечто вроде base64 (совместимого с UTF-8).

Тип двоичной полезной нагрузки отправляется напрямую.Байты отправляются как есть в полезной нагрузке.Это более эффективно по пропускной способности.Это означает, что вам не нужно делать шаг кодирования / декодирования.Отправленные вами байты отправляются напрямую, а полученные вами байты могут быть доступны напрямую без декодирования.

0 голосов
/ 11 октября 2011

Когда вы используете байты, он на самом деле просто конвертирует его в шестнадцатеричный код перед отправкой. Насколько скорость. Я не думаю, что это имеет значение. Похоже, они дают вам слишком много возможностей, поэтому вы можете отправлять эти данные в любом случае, в зависимости от того, что у вас уже есть для данных.

...