java socket writeUTF()和readUTF() [英] java socket writeUTF() and readUTF()

查看:358
本文介绍了java socket writeUTF()和readUTF()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在阅读一些Java套接字代码片段并且说明了一个事实,即在套接字通信中,为了按顺序发送消息,您不必手动分离它们,编写器/阅读器流自动执行以下操作您。下面是一个例子:

I've been reading some Java socket code snippet and fonund out a fact that in socket communication, to send messages in sequence, you don't have to seperate them by hand, the writer/reader stream do the things automatically for you. Here is an example:

writer.java
writeUTF("Hello");
writeUTF("World");


reader.java
String a=readUTF(); // a=Hello
String a=readUTF(); // b=World

我已经尝试过这段代码片段并且工作正常。但是,我想知道这种编码风格是否应该正常工作。是否存在按顺序使用套接字流而没有明确分隔每个分段的潜在风险?

I've tried this code snippet and it works fine. However, I'm wondering whether this kind of coding style is supposed to be working fine. Is there any potential risks of using the socket stream in sequence without explicitly seperating each segment?

推荐答案

writeUTF() readUTF()写入字符串的长度(以字节为单位,编码为UTF-8时),后跟数据,使用修改后的UTF-8 编码。因此存在一些潜在的问题:

The writeUTF() and readUTF() write the length of the String (in bytes, when encoded as UTF-8) followed by the data, and use a modified UTF-8 encoding. So there are some potential problems:


  • 对于纯ASCII,可以通过这种方式处理的字符串的最大长度为65535,如果使用则减少非ASCII字符 - 除了保守地假设每个字符3个字节之外,你不能轻易预测那种情况下的限制。所以,如果你确定你永远不会发送超过20k的字符串,你会没事的。

  • 如果应用程序需要与其他东西进行通信(那不是用Java编写的) ),另一方可能很难处理修改后的UTF-8。对于应用程序内部通信,您不必担心。

这篇关于java socket writeUTF()和readUTF()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆