【发布时间】:2013-07-25 03:27:07
【问题描述】:
我有一个到服务器的 TCP 连接,由套接字和流实现。在会话期间,服务器可以发送任意数量的消息 - 我必须阅读并处理所有消息。
我创建了一个线程,它在无限循环中检查和读取数据:
in = socket.getInputStream();
ByteArrayOutputStream baos = null;
byte[] buf = new byte[4096];
while(!isInterrupted()) {
baos = new ByteArrayOutputStream();
for(int s; ( s = in.read(buf)) != -1; ) {
baos.write(buf, 0, s);
if(in.available() <= 0 ) {
readChunk(baos.toByteArray());
}
}
}
但实际上,它效率不高 - 它使 CPU 处于繁重的负载下,并且不知何故字节与之前的答案粘在一起。
解决这种情况最有效和最优雅的方法是什么?
【问题讨论】:
-
在不知道您收到的信息类型的情况下很难给出答案。是文本吗?二进制数据?是固定长度吗?您是否也对服务器进行编程?大多数情况下都需要协议。
-
@ja_mesa 它是二进制数据。前四个字节用于写入消息长度,后四个字节用于 CRC32 校验和。