50,530
社区成员
发帖
与我相关
我的任务
分享
ByteBuffer buffer = ByteBuffer.allocate(10M);
int byteswrtie = inChannel.write(buffer);
while(! bufferFull(byteswrtie ) ) {
byteswrtie = inChannel.write(buffer);
}
也许你觉得,上面的方法整个线程要等10M写完,不还是等于阻塞吗?
那看看下面的应用,你可能就理解了
ByteBuffer buffer = ByteBuffer.allocate(10M);
int[] indexs = new indexs[100];
for(int i = 0; i < 100; i ++){
int from = indexs[i];
if(from > 10M){
continue; //客户端i已经写完
}
int len = 1M;
int byteswrtie = inChannels[i].write(buffer, from , len);
indexs[i] = from + byteswrtie ;
}
上面这样,向100个客户端发10M的文件,由于各客户端网络原因,不可能一个一个地发,上面的代码可以实现100个同时发,一个给一点,直到全部给完。
java.nio.Buffer是NIO的专用缓冲区,buffer里的东西可能不会一次write完的。ByteBuffer extends Buffer