0
我有一個Java NIO套接字服務器。Java NIO SocketChannel讀預定義字節數
服務器從遠程客戶端獲得JSONObjects
。 我使用的是SocketChannel.read(ByteBuffer)
方法以便從通道讀取。每個消息以'\ n'結尾,標記當前消息的結尾。
我的問題是,有時read()
方法來讀取更多的字節和「\ n」後到達.. 有沒有辦法對我來說,從SocketChannel
只有等到「\ n」讀發現?我想可能是逐字節讀取(我只是找不到文件如何實現它..)?
其他解決方案?
這不是一個壞主意,但我想留下SocketChannel內剩餘的數據來閱讀,所以選擇器會發現這是新的消息以後閱讀..這很重要,因爲我的服務器機制是爲每條消息 - 線程池中的一個線程將執行 –
要做到這一點,您可能會按照您的建議一次讀取一個字節,我認爲這樣會導致性能不佳。我認爲,不要依賴SelectionKey的可讀性來了解何時有消息,每次讀取後都需要在緩衝區中查找'\ n'。無論如何,你可能必須這樣做,因爲批量讀取不會保證在一個調用中讀取整行(甚至可以讀取多行)。 – VGR