复制大量数据时重用套接字

时间:2011-08-18 00:18:43

标签: java sockets

我目前正通过Java套接字发送大量数据,我正在使用Apache Commons IOUtils库使用copyLarge方法进行复制以发送/接收数据。问题是copyLarge读取,直到输入流返回-1。我复制了一个片段

while (-1 != (n = input.read(buffer))) {
   output.write(buffer, 0, n);
   count += n;
}

此方法将阻塞,直到套接字关闭,但问题是我想将套接字重用于其他大数据。我看到的替代方法是为每个正在传输的数据重新打开一个新套接字,或者编写我自己的读取方法来查找流令牌的结尾(即换行符)。

已经有一段时间了,因为我已经编写了这样的低级套接字代码,但我在这里遗漏了什么?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:3)

在发送之前,您知道有多少数据吗?如果是这样,我基本上会在消息的长度前缀。

比使用流末尾令牌更容易处理,并且不得不担心转义,过度阅读等。

但是,是的,你需要做某事,因为TCP / IP是一种基于流的协议。除非你有一些指示数据以某种方式的结尾,你永远不知道是否还会有更多的东西来现实。