用ByteBuffer找不到NewLine

时间:2013-10-18 23:00:28

标签: java sockets io byte nio

将一些SocketChannel用于NIO我通过此方法传递密钥以获取消息。然而,无论何时它通过它都显示一个换行符,我不能为我的生活找出原因和地点。任何帮助,将不胜感激。

public void messageHandler(SelectionKey key) throws IOException
    {
        SocketChannel ch = (SocketChannel) key.channel();
        StringBuilder sb = new StringBuilder();
        buf.clear();
        int read = 0;
        while( (read = ch.read(buf)) > 0 ) {
            buf.flip();
            byte[] bytes = new byte[buf.limit()];
            buf.get(bytes);
            sb.append(new String(bytes));
            buf.clear();
       }
}

编辑:我在那里留下了一个错误的打印声明,用于我自己的调试。这与它无关。我将其输出到sb.toString()并在那里包含一个新行。

3 个答案:

答案 0 :(得分:0)

我假设另一端正在发送一个新行,它位于bytes

使用println()(默认情况下自动刷新)可以替换为print()和flush();

BTW你可以使用ByteBuffer.wrap(bytes)来避免两次复制字节。

for(byte b: bytes)
    if(b == 10 || b == 13) 
         System.err.println("Contains newline");

答案 1 :(得分:0)

它显示换行符,因为您正在调用println()。

答案 2 :(得分:0)

println() 打印表示打印, ln 表示新行,因此您可以说它会打印然后它会添加新行 如果您想先获得新行,请使用此print("\n wrint something here");