【发布时间】:2014-12-10 03:07:00
【问题描述】:
System.out.println(" @ bBuffer = " + bBuffer.capacity());
headerBuffer.rewind();
socketChannel.write(headerBuffer);
int writen = socketChannel.write(bBuffer);
System.out.println(" @ writen = " + writen);
bBuffer 是ByteBuffer 类型的对象,它来自FileChannel.map()(它是一个图像文件)。当我在客户端收到这个图像文件时,它不是一个完整的图像——大约一半的图像丢失了。所以我通过将一些统计信息打印到控制台来检查写入了多少字节。输出是:
@ bBuffer = 319932
@ writen = 131071
剩下的字节怎么了?似乎缺少 (319923 - 131071) 个字节。
有时written 等于bBuffer.capacity(),它似乎与文件大小或缓冲区容量无关。
【问题讨论】:
-
尝试 bBuffer.remaining() 调用,ByteBuffers 不应该立即读取或写入所有内容。见stackoverflow.com/a/27130710/185565
标签: nio socketchannel filechannel