读取的时候按照以下方法,记得要buf.clear()才能留有空间接收-1
while ((numBytesRead = socketChannel.read(buf)) != -1) {
if (numBytesRead == 0) {
// 如果没有数据,则稍微等待一下
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
continue;
}
// 转到最开始
buf.flip();
/*处理buf中的数据*/
// 也可以转化为字符串,不过需要借助第三个变量了。
// buf.get(buff, 0, numBytesRead);
// System.out.println(new String(buff, 0, numBytesRead, "UTF-8"));
buf.clear();
}
本文详细阐述了在处理网络数据传输时,如何通过优化读取流程,确保数据的高效和稳定接收。重点介绍了如何利用缓冲区(buf)进行数据分段处理,包括读取、翻转缓冲区以获取数据、以及清理缓冲区以准备下一次读取。同时提供了避免数据丢失和提高程序响应性的策略。
308

被折叠的 条评论
为什么被折叠?



