我从java服务器向C客户端发送一个字符串。在客户端中,String的开头总是有2个额外的字节。我猜java用它们来表示字符串的大小?
我发送带有此代码的字符串 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(randomString);
答案 0 :(得分:3)
如果您通过调用writeUTF
将字符串发送到服务器,则有线格式确实包含在前两个字节中作为short
发送的字符串的长度:
使用修改后的UTF-8编码以与机器无关的方式将字符串写入指定的DataOutput。 首先,两个字节被写入,就像
writeShort
方法一样,给出了要遵循的字节数。该值是实际写出的字节数,而不是字符串的长度。 (重点补充)
您可以在源代码here中查找正在进行的具体细节。
答案 1 :(得分:2)
查看源代码,java doc告诉我们:
使用修改后的UTF-8将字符串写入指定的DataOutput 以与机器无关的方式编码。
首先,将两个字节写入,就像使用writeShort方法一样 给出要遵循的字节数。该值是数字 实际写出的字节数,而不是字符串的长度。
答案 2 :(得分:1)
我认为这是UTF-8的Byte Order Mark。