猿问

Java NIO写入异常问题

在使用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()=1024000byteBuffer.position()=261676



ITMISS
浏览 571回答 2
2回答

烙印99

没有规定必须一次就把全部数据写完吧,
随时随地看视频慕课网APP

相关分类

Java
我要回答