I have a Java-base TCP server which needs some modification. It has
to accept messages as CodedInputStream from C++ clients that send
CodedOutputStream. The server uses NIO class
java.nio.channels.SocketChannel to read from the socket. What would
be the easiest way to attach a CodedInputStream to this?
Thanks,
Nader
I created a really thin InputStream implementation that wrapped my NIO
ByteBuffer(s), then use CodedInputStream.newInstance(InputStream
stream). You really only need to implement the read(byte[]
destination, int offset, int length) method of this class, so it is
actually pretty straightforward. There might be a "better" way but it
works for me. Hope this helps,
Evan
--
Evan Jones
http://evanjones.ca/
It does help. However, I seem to have some problem reading messages
that way. My guess is that it has something to do with the fact that
the channels are non-blocking. Is there any special thing to consider
when working with such channels?
Nader
You need to know the length of the message you are reading, then only
call the parse method once you have the entire thing buffered. So you
send the size first, then the message. On the receiving side, you read
the size, then then you keep reading from the non-blocking socket
until you have the whole thing buffered, then you parse it. I have
code that actually does this that is open source, but it is "research
quality" so it may not actually be helpful to others. But you may want
to look at it: