[英]java socket writeUTF() and readUTF()
我一直在阅读一些Java套接字代码片段,并且说明了在套接字通信中,为了按顺序发送消息,您不必手动分离它们,编写器/阅读器流会自动为您做事。 这是一个例子:
writer.java
writeUTF("Hello");
writeUTF("World");
reader.java
String a=readUTF(); // a=Hello
String a=readUTF(); // b=World
我已经尝试过这段代码片段并且工作正常。 但是,我想知道这种编码风格是否应该正常工作。 是否存在按顺序使用套接字流而不明确分隔每个分段的潜在风险?
writeUTF()
和readUTF()
写入字符串的长度(以字节为单位,编码为UTF-8时),后跟数据,并使用修改后的UTF-8编码。 所以有一些潜在的问题:
根据文档, readUTF
和writeUTF
方法使用UTF8的修改版本,该版本还添加了要在beginnig中读取的字符的长度。
这应该意味着读取操作将等待,直到返回足够的字符,然后才返回字符串。这意味着如果您没有看到它们,它们实际上也是分段的,因为您只是使用DataInputStream
和DataOutputStream
来装饰套接字的流。
总之,是的,它应该是非常安全的,因为API本身将负责分离单个消息。
java.net.Socket
工作正常,流等待readUTF();
但是当使用mina的CumulativeProtocolDecoder
,它不会抛出java.io.EOFException
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.