jyczwys 2015-10-16 01:37 采纳率: 42.9%
浏览 1818

Android Socket使用NIO的基础性问题

在尝试向SocketChannel写入数据时出问题了,每次写入后返回的Size都是0,问题代码如下:

 SocketChannel socketChannel = null;
 ByteBuffer sendBuffer = null;

下面这是发送数据的函数中一部分

 sendBuffer = ByteBuffer.wrap("hello".getBytes("UTF8"));
 sendBuffer.flip();
 int bufferLength = sendBuffer.array().length;
 int sendsize = 0;
 while(sendBuffer.hasRemaining())
 {
   sendsize += socketChannel.write(sendBuffer);
 }
 sendBuffer.clear();

问题1:查看了ByteBuffer.flip() 和 ByteBuffer.clear()的代码发现都是改变它的位置指针,flip是把position 和 limit 都置0,而remaining的值是limit - position,这样一来flip之后remaining不总是等于0吗?我的循环就始终没有执行,但是又在几篇帖子里看到说write之前需要先flip,于是很困惑。
问题2:如果不加while语句,不判断remaining而直接write,发现返回的size还是0,就是说没有数据被写到socketChannel里。
还请大侠指点迷津!

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 lammps拉伸应力应变曲线分析
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
    • ¥30 python代码,帮调试
    • ¥15 #MATLAB仿真#车辆换道路径规划
    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python