【发布时间】:2013-07-10 23:13:26
【问题描述】:
我想在没有readline() 方法的情况下从客户端或服务器同步读取所有数据(如 c++ 中的readall())。
我不想使用类似下面的代码:
BufferedReader reader = new BufferedReader(new inputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
document.append(line + "\n");
我应该使用什么方法?
【问题讨论】:
-
您反对使用您发布的代码的原因是什么?
-
为什么要获取所有数据?使用 Sockets 的一个常见混淆是它支持接收消息的假设,如果你可以一次读取所有数据,你可以读取一个完整的“消息”。虽然这似乎可以在低负载下的 TCP 中工作,并且在“消息”之间存在时间,但 TCP 不支持这一点,并且这在负载下不能可靠地工作,尤其是在负载下。如果您需要基于消息的协议,您可以尝试 Java 7 中的 SCTP,或者按照预期的方式使用 TCP 作为流协议。
-
诸如浏览器之类的东西永远不会在连接并等待响应时发送空值...我想一次同步读取所有标题和数据!
-
@Erfan13 请再试一次。我无法对那些胡言乱语做出头或尾。
标签: java sockets asynchronous