在使用NIO进行写入数据时,我把缓冲区增大1000k,为什么这时会出现没有写完的情况??
public class Server {
public static void main(String[] args) throws Exception {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocketChannel.bind(new InetSocketAddress("localhost", 7077));
Selector selector = Selector.open();
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
selector.select();
Set<SelectionKey> selectedKeysSet = selector.selectedKeys();
Iterator<SelectionKey> iterator = selectedKeysSet.iterator();
while (iterator.hasNext()) {
SelectionKey key = iterator.next();
SocketChannel socketChannel = ((ServerSocketChannel) key.channel()).accept();
socketChannel.configureBlocking(false);
ByteBuffer byteBuffer = ByteBuffer.allocate(1000 * 1024);
System.out.println("byteBuffer.limit()=" + byteBuffer.limit());
socketChannel.write(byteBuffer);
System.out.println("byteBuffer.position()=" + byteBuffer.position());
socketChannel.close();
}
serverSocketChannel.close();
}
}
public class Client {
public static void main(String[] args) throws Exception {
SocketChannel channel1 = SocketChannel.open();
channel1.connect(new InetSocketAddress("localhost", 7077));
TimeUnit.MINUTES.sleep(1);
channel1.close();
}
}
byteBuffer.limit()=1024000
byteBuffer.position()=261676
猜测是你设置的不准确,按照你的代码,我做了测试: