java - NIO:读取直到缓冲区大小或分隔符

时间:2016-09-28 09:12:26

标签: java sockets nio data-transfer

让我们说我通过NIO SocketChannel连接客户端,这将发送表格的请求

<command>\r\n

可能会或可能不会跟着

<value>\r\n

取决于命令。如果是,<command>将包含之后发送的<value>的大小(以字节为单位)。

现在我对这个NIO的新东西很新,但是我很需要首先阅读<command>来准备一个缓冲区来接收<value>。我怎么做呢?

对于<command>可以有不同的长度,虽然我知道最大长度,但我怀疑如果我弄错了(例如,当命令较短时读取最大长度)我将最终阅读其中一些{ {1}}进入我用来接收<value>的同一个缓冲区。

有没有办法在<command>处删除阅读?

(我应该提到我不允许使用任何外部库。)

修改

我的最新尝试,

\r\n

结果(有些不足为奇)在private void read(SelectionKey k) throws IOException{ SocketChannel client = (SocketChannel)k.channel(); buffer.clear(); BufferedReader is = new BufferedReader(new InputStreamReader(client.socket().getInputStream())); System.out.println(is.readLine()); }

0 个答案:

没有答案