Я отправляю строку с java-сервера на C-клиент. В клиенте в начале строки всегда есть 2 дополнительных байта. Я думаю, что java использует их для указания размера строки?
Я отправляю строку с этим кодом DataOutputStream dos = new DataOutputStream (socket.getOutputStream()); dos.writeUTF(randomString);
Если вы отправляете строку на сервер, вызывая writeUTF
, формат проводов действительно включает длину строки, отправленной как short
в первых двух байтах:
Записывает строку в указанный DataOutput с использованием модифицированной кодировки UTF-8 машинным образом. Во-первых, два байта записываются так, как будто методом
writeShort
количество байтов. Это значение представляет собой количество фактически выписанных байтов, а не длину строки. (выделено мной)
Вы можете посмотреть специфику происходит в исходном коде здесь.
Изучая исходный код, java-документ сообщает нам:
Записывает строку в указанный DataOutput с использованием модифицированной кодировки UTF-8 машинным образом.
Во-первых, два байта записываются так, как будто методом writeShort указывается количество байтов. Это значение представляет собой количество фактически выписанных байтов, а не длину строки.
Думаю, это байт-ордер UTF-8.
writeUTF
?