-1

使用一些带有 NIO 的 SocketChannels 我通过这个方法传递密钥来获取消息。但是,每当它通过时,它都会显示一个换行符,我终生无法找出原因和位置。任何帮助,将不胜感激。

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() 并在其中包含一个新行。

4

3 回答 3

0

我假设另一端正在发送一条新线路,它在bytes

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

顺便说一句,您可以使用 ByteBuffer.wrap(bytes) 来避免复制字节两次。

for(byte b: bytes)
    if(b == 10 || b == 13) 
         System.err.println("Contains newline");
于 2013-10-18T23:03:01.330 回答
0

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

于 2013-10-18T23:08:50.463 回答
0

println() print表示打印,ln表示换行,所以你可以说它会打印,然后如果你想先换行,它会放新行,然后使用这个print("\n wrint something here");

于 2013-10-18T23:12:43.570 回答