我有一个Java NIO套接字服务器。

服务器正在从远程客户端获取JSONObjects
我正在使用SocketChannel.read(ByteBuffer)方法以便从通道中读取。
每条消息均以“ \ n”结尾,这标志着当前消息的结尾。

我的问题是,有时read()方法会读取更多字节并到达'\ n'之后。
我有什么办法只能从SocketChannel读取直到找到'\ n'吗?我想过也许逐字节读取(我只是找不到有关如何实现它的文档..)?

还有其他解决方案吗?

最佳答案

处理从ByteBuffer一直到'\ n'的字节,因此缓冲区的位置是'\ n'之后的第一个字节,然后调用ByteBuffer.compact()。超过“ \ n”的所有字节将保留在缓冲区中,下一次读取将追加到它们之后。

07-26 09:43
查看更多