0
我有一个Java NIO套接字服务器。Java NIO SocketChannel读预定义字节数
服务器从远程客户端获得JSONObjects
。 我使用的是SocketChannel.read(ByteBuffer)
方法以便从通道读取。每个消息以'\ n'结尾,标记当前消息的结尾。
我的问题是,有时read()
方法来读取更多的字节和“\ n”后到达.. 有没有办法对我来说,从SocketChannel
只有等到“\ n”读发现?我想可能是逐字节读取(我只是找不到文件如何实现它..)?
其他解决方案?
这不是一个坏主意,但我想留下SocketChannel内剩余的数据来阅读,所以选择器会发现这是新的消息以后阅读..这很重要,因为我的服务器机制是为每条消息 - 线程池中的一个线程将执行 –
要做到这一点,您可能会按照您的建议一次读取一个字节,我认为这样会导致性能不佳。我认为,不要依赖SelectionKey的可读性来了解何时有消息,每次读取后都需要在缓冲区中查找'\ n'。无论如何,你可能必须这样做,因为批量读取不会保证在一个调用中读取整行(甚至可以读取多行)。 – VGR