将一些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()并在那里包含一个新行。
答案 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");