我有一个Java NIO套接字服务器。
服务器正在从远程客户端获取JSONObjects
。
我正在使用SocketChannel.read(ByteBuffer)
方法以便从通道中读取。
每条消息均以“ \ n”结尾,这标志着当前消息的结尾。
我的问题是,有时read()
方法会读取更多字节并到达'\ n'之后。
我有什么办法只能从SocketChannel
读取直到找到'\ n'吗?我想过也许逐字节读取(我只是找不到有关如何实现它的文档..)?
还有其他解决方案吗?
最佳答案
处理从ByteBuffer一直到'\ n'的字节,因此缓冲区的位置是'\ n'之后的第一个字节,然后调用ByteBuffer.compact()。超过“ \ n”的所有字节将保留在缓冲区中,下一次读取将追加到它们之后。