开发者

Reusing socket when copying large amounts of data

I am currently sending large amounts of data over a Java socket, and I am using the Apache Commons IOUtils开发者_运维百科 library to copy using the copyLarge method to send/receive the data. The problem is that the copyLarge reads until the the input stream returns -1. I have copied a snippet below

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

This method will block until the socket is closed, but the problem is I want to reuse the socket to additional large data. The alternatives I see are to either reopen a new socket for each data being transferred, or to write my own read method that looks for an end of stream token (i.e. a newline character).

It has been a while since I've written low level socket code like this, but am I missing something here? Or is there an easier way to do this?


Do you know how much data you have before sending it over? If so, I'd basically length-prefix the message.

That's much easier to handle cleanly than using an end-of-stream token and having to worry about escaping, over-reading etc.

But yes, you'll need to do something, because TCP/IP is a stream-based protocol. Unless you have some indicator for the end of data somehow, you never know whether there might be some more to come Real Soon Now.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜