java - 当我将 ByteBuffer 转换为 String 时,为什么会得到很多不需要的输出?

标签 java nio

我编写了一个 UDP 服务器来使用 NIO 接收来自客户端的消息:

DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(new InetSocketAddress(9999));
ByteBuffer buf = ByteBuffer.allocate(1024);
buf.clear();
while (channel.receive(buf) != null) {
      System.out.println("---has received data:" + new String(buf.array(), ASCII));
      buf.clear();
}

然后我使用 nc 命令向 UDP 服务器发送一些数据

nc -u 127.0.0.1 9999 < ./test.txt

test.txt中只有一行

#cat ./test.txt
12345678

服务器的输出是这样的 enter image description here

那么我如何获取 12345678 字符串并删除以下“口”内容?

最佳答案

这不是不需要的输出,这是因为您打印了整个缓冲区。

buf.clear(); 不会用零清除缓冲区,它只是将位置重置为 0。

关于java - 当我将 ByteBuffer 转换为 String 时,为什么会得到很多不需要的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45093316/

相关文章:

java - 最简单的 NIO 服务器示例

java nio和ByteBuffer问题

java - Java中排序(内存映射?)文件中的二进制搜索

java - split(//s+) 不删除空格

java - 如何找到 TIBCO Rendezvous 消息的字节编码?

java - Choco 在不应该的情况下强制变量为真

java - Spring boot @RequestBody with @Valid- ExceptionHandler for MethodArgumentNotValidException

java.nio.file 包未检测到目录更改

java - 在 Java 中使用 Google Drive 中的 Google Spreadsheet API 创建电子表格

java - Java 中复杂对象的不精确比较?