public abstract class com.mongodb.internal.connection.AsynchronousChannelStream implements com.mongodb.connection.Stream
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.mongodb.internal.connection.AsynchronousChannelStream
  super_class: java.lang.Object
{
  private final com.mongodb.ServerAddress serverAddress;
    descriptor: Lcom/mongodb/ServerAddress;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.connection.SocketSettings settings;
    descriptor: Lcom/mongodb/connection/SocketSettings;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.connection.BufferProvider bufferProvider;
    descriptor: Lcom/mongodb/connection/BufferProvider;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile com.mongodb.internal.connection.ExtendedAsynchronousByteChannel channel;
    descriptor: Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private volatile boolean isClosed;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  public void <init>(com.mongodb.ServerAddress, com.mongodb.connection.SocketSettings, com.mongodb.connection.BufferProvider);
    descriptor: (Lcom/mongodb/ServerAddress;Lcom/mongodb/connection/SocketSettings;Lcom/mongodb/connection/BufferProvider;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // com.mongodb.ServerAddress serverAddress
        start local 2 // com.mongodb.connection.SocketSettings settings
        start local 3 // com.mongodb.connection.BufferProvider bufferProvider
         0: .line 53
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 55
            aload 0 /* this */
            aload 1 /* serverAddress */
            putfield com.mongodb.internal.connection.AsynchronousChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
         2: .line 56
            aload 0 /* this */
            aload 2 /* settings */
            putfield com.mongodb.internal.connection.AsynchronousChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
         3: .line 57
            aload 0 /* this */
            aload 3 /* bufferProvider */
            putfield com.mongodb.internal.connection.AsynchronousChannelStream.bufferProvider:Lcom/mongodb/connection/BufferProvider;
         4: .line 58
            return
        end local 3 // com.mongodb.connection.BufferProvider bufferProvider
        end local 2 // com.mongodb.connection.SocketSettings settings
        end local 1 // com.mongodb.ServerAddress serverAddress
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    5     1   serverAddress  Lcom/mongodb/ServerAddress;
            0    5     2        settings  Lcom/mongodb/connection/SocketSettings;
            0    5     3  bufferProvider  Lcom/mongodb/connection/BufferProvider;
    MethodParameters:
                Name  Flags
      serverAddress   final
      settings        final
      bufferProvider  final

  public com.mongodb.ServerAddress getServerAddress();
    descriptor: ()Lcom/mongodb/ServerAddress;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 61
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
            areturn
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;

  public com.mongodb.connection.SocketSettings getSettings();
    descriptor: ()Lcom/mongodb/connection/SocketSettings;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 65
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            areturn
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;

  public com.mongodb.connection.BufferProvider getBufferProvider();
    descriptor: ()Lcom/mongodb/connection/BufferProvider;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 69
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.bufferProvider:Lcom/mongodb/connection/BufferProvider;
            areturn
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;

  public synchronized com.mongodb.internal.connection.ExtendedAsynchronousByteChannel getChannel();
    descriptor: ()Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 73
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
            areturn
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;

  protected synchronized void setChannel(com.mongodb.internal.connection.ExtendedAsynchronousByteChannel);
    descriptor: (Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;)V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // com.mongodb.internal.connection.ExtendedAsynchronousByteChannel channel
         0: .line 77
            ldc "current channel is null"
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
            ifnonnull 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack: java.lang.String
         1: iconst_0
      StackMap locals: com.mongodb.internal.connection.AsynchronousChannelStream com.mongodb.internal.connection.ExtendedAsynchronousByteChannel
      StackMap stack: java.lang.String int
         2: invokestatic com.mongodb.assertions.Assertions.isTrue:(Ljava/lang/String;Z)V
         3: .line 78
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.isClosed:Z
            ifeq 6
         4: .line 79
            aload 0 /* this */
            aload 1 /* channel */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream.closeChannel:(Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;)V
         5: .line 80
            goto 7
         6: .line 81
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* channel */
            putfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
         7: .line 83
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.mongodb.internal.connection.ExtendedAsynchronousByteChannel channel
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    8     1  channel  Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
    MethodParameters:
         Name  Flags
      channel  final

  public void writeAsync(java.util.List<org.bson.ByteBuf>, com.mongodb.connection.AsyncCompletionHandler<java.lang.Void>);
    descriptor: (Ljava/util/List;Lcom/mongodb/connection/AsyncCompletionHandler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=9, locals=5, args_size=3
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // java.util.List buffers
        start local 2 // com.mongodb.connection.AsyncCompletionHandler handler
         0: .line 87
            new com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter
            dup
            aload 0 /* this */
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter.<init>:(Lcom/mongodb/internal/connection/AsynchronousChannelStream;)V
            astore 3 /* byteChannel */
        start local 3 // com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter byteChannel
         1: .line 88
            aload 1 /* buffers */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4 /* iter */
        start local 4 // java.util.Iterator iter
         2: .line 89
            aload 0 /* this */
            aload 3 /* byteChannel */
            aload 4 /* iter */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            new com.mongodb.internal.connection.AsynchronousChannelStream$1
            dup
            aload 0 /* this */
            aload 4 /* iter */
            aload 3 /* byteChannel */
            aload 2 /* handler */
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$1.<init>:(Lcom/mongodb/internal/connection/AsynchronousChannelStream;Ljava/util/Iterator;Lcom/mongodb/internal/connection/AsynchronousChannelStream$AsyncWritableByteChannelAdapter;Lcom/mongodb/connection/AsyncCompletionHandler;)V
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream.pipeOneBuffer:(Lcom/mongodb/internal/connection/AsynchronousChannelStream$AsyncWritableByteChannelAdapter;Lorg/bson/ByteBuf;Lcom/mongodb/connection/AsyncCompletionHandler;)V
         3: .line 104
            return
        end local 4 // java.util.Iterator iter
        end local 3 // com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter byteChannel
        end local 2 // com.mongodb.connection.AsyncCompletionHandler handler
        end local 1 // java.util.List buffers
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0         this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    4     1      buffers  Ljava/util/List<Lorg/bson/ByteBuf;>;
            0    4     2      handler  Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;
            1    4     3  byteChannel  Lcom/mongodb/internal/connection/AsynchronousChannelStream$AsyncWritableByteChannelAdapter;
            2    4     4         iter  Ljava/util/Iterator<Lorg/bson/ByteBuf;>;
    Signature: (Ljava/util/List<Lorg/bson/ByteBuf;>;Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;)V
    MethodParameters:
         Name  Flags
      buffers  final
      handler  final

  public void readAsync(int, com.mongodb.connection.AsyncCompletionHandler<org.bson.ByteBuf>);
    descriptor: (ILcom/mongodb/connection/AsyncCompletionHandler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=11, locals=4, args_size=3
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // int numBytes
        start local 2 // com.mongodb.connection.AsyncCompletionHandler handler
         0: .line 108
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.bufferProvider:Lcom/mongodb/connection/BufferProvider;
            iload 1 /* numBytes */
            invokeinterface com.mongodb.connection.BufferProvider.getBuffer:(I)Lorg/bson/ByteBuf;
            astore 3 /* buffer */
        start local 3 // org.bson.ByteBuf buffer
         1: .line 109
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
            aload 3 /* buffer */
            invokeinterface org.bson.ByteBuf.asNIO:()Ljava/nio/ByteBuffer;
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.settings:Lcom/mongodb/connection/SocketSettings;
            getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
            invokevirtual com.mongodb.connection.SocketSettings.getReadTimeout:(Ljava/util/concurrent/TimeUnit;)I
            i2l
            getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
            aconst_null
         2: .line 110
            new com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler
            dup
            aload 0 /* this */
            aload 3 /* buffer */
            aload 2 /* handler */
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler.<init>:(Lcom/mongodb/internal/connection/AsynchronousChannelStream;Lorg/bson/ByteBuf;Lcom/mongodb/connection/AsyncCompletionHandler;)V
         3: .line 109
            invokeinterface com.mongodb.internal.connection.ExtendedAsynchronousByteChannel.read:(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V
         4: .line 111
            return
        end local 3 // org.bson.ByteBuf buffer
        end local 2 // com.mongodb.connection.AsyncCompletionHandler handler
        end local 1 // int numBytes
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    5     1  numBytes  I
            0    5     2   handler  Lcom/mongodb/connection/AsyncCompletionHandler<Lorg/bson/ByteBuf;>;
            1    5     3    buffer  Lorg/bson/ByteBuf;
    Signature: (ILcom/mongodb/connection/AsyncCompletionHandler<Lorg/bson/ByteBuf;>;)V
    MethodParameters:
          Name  Flags
      numBytes  final
      handler   final

  public void open();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 115
            new com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler
            dup
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.<init>:()V
            astore 1 /* handler */
        start local 1 // com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler handler
         1: .line 116
            aload 0 /* this */
            aload 1 /* handler */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream.openAsync:(Lcom/mongodb/connection/AsyncCompletionHandler;)V
         2: .line 117
            aload 1 /* handler */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.getOpen:()V
         3: .line 118
            return
        end local 1 // com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler handler
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            1    4     1  handler  Lcom/mongodb/internal/connection/AsynchronousChannelStream$FutureAsyncCompletionHandler<Ljava/lang/Void;>;
    Exceptions:
      throws java.io.IOException

  public void write(java.util.List<org.bson.ByteBuf>);
    descriptor: (Ljava/util/List;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // java.util.List buffers
         0: .line 122
            new com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler
            dup
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.<init>:()V
            astore 2 /* handler */
        start local 2 // com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler handler
         1: .line 123
            aload 0 /* this */
            aload 1 /* buffers */
            aload 2 /* handler */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream.writeAsync:(Ljava/util/List;Lcom/mongodb/connection/AsyncCompletionHandler;)V
         2: .line 124
            aload 2 /* handler */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.getWrite:()V
         3: .line 125
            return
        end local 2 // com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler handler
        end local 1 // java.util.List buffers
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    4     1  buffers  Ljava/util/List<Lorg/bson/ByteBuf;>;
            1    4     2  handler  Lcom/mongodb/internal/connection/AsynchronousChannelStream$FutureAsyncCompletionHandler<Ljava/lang/Void;>;
    Exceptions:
      throws java.io.IOException
    Signature: (Ljava/util/List<Lorg/bson/ByteBuf;>;)V
    MethodParameters:
         Name  Flags
      buffers  final

  public org.bson.ByteBuf read(int);
    descriptor: (I)Lorg/bson/ByteBuf;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // int numBytes
         0: .line 129
            new com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler
            dup
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.<init>:()V
            astore 2 /* handler */
        start local 2 // com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler handler
         1: .line 130
            aload 0 /* this */
            iload 1 /* numBytes */
            aload 2 /* handler */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream.readAsync:(ILcom/mongodb/connection/AsyncCompletionHandler;)V
         2: .line 131
            aload 2 /* handler */
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.getRead:()Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            areturn
        end local 2 // com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler handler
        end local 1 // int numBytes
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0      this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    3     1  numBytes  I
            1    3     2   handler  Lcom/mongodb/internal/connection/AsynchronousChannelStream$FutureAsyncCompletionHandler<Lorg/bson/ByteBuf;>;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      numBytes  final

  public com.mongodb.ServerAddress getAddress();
    descriptor: ()Lcom/mongodb/ServerAddress;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 136
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.serverAddress:Lcom/mongodb/ServerAddress;
            areturn
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;

  public synchronized void close();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 141
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.internal.connection.AsynchronousChannelStream.isClosed:Z
         1: .line 143
            aload 0 /* this */
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream.closeChannel:(Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;)V
         2: .line 144
            goto 6
      StackMap locals:
      StackMap stack: java.lang.Throwable
         3: astore 1
         4: .line 145
            aload 0 /* this */
            aconst_null
            putfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
         5: .line 146
            aload 1
            athrow
         6: .line 145
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.mongodb.internal.connection.AsynchronousChannelStream.channel:Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
         7: .line 147
            return
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
      Exception table:
        from    to  target  type
           1     3       3  any

  private void closeChannel(com.mongodb.internal.connection.ExtendedAsynchronousByteChannel);
    descriptor: (Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // com.mongodb.internal.connection.ExtendedAsynchronousByteChannel channel
         0: .line 151
            aload 1 /* channel */
            ifnull 4
         1: .line 152
            aload 1 /* channel */
            invokeinterface com.mongodb.internal.connection.ExtendedAsynchronousByteChannel.close:()V
         2: .line 154
            goto 4
      StackMap locals:
      StackMap stack: java.io.IOException
         3: pop
         4: .line 157
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.mongodb.internal.connection.ExtendedAsynchronousByteChannel channel
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    5     1  channel  Lcom/mongodb/internal/connection/ExtendedAsynchronousByteChannel;
      Exception table:
        from    to  target  type
           0     2       3  Class java.io.IOException
    MethodParameters:
         Name  Flags
      channel  final

  public boolean isClosed();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
         0: .line 161
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.isClosed:Z
            ireturn
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;

  public org.bson.ByteBuf getBuffer(int);
    descriptor: (I)Lorg/bson/ByteBuf;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // int size
         0: .line 166
            aload 0 /* this */
            getfield com.mongodb.internal.connection.AsynchronousChannelStream.bufferProvider:Lcom/mongodb/connection/BufferProvider;
            iload 1 /* size */
            invokeinterface com.mongodb.connection.BufferProvider.getBuffer:(I)Lorg/bson/ByteBuf;
            areturn
        end local 1 // int size
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    1     1  size  I
    MethodParameters:
      Name  Flags
      size  final

  private void pipeOneBuffer(com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter, org.bson.ByteBuf, com.mongodb.connection.AsyncCompletionHandler<java.lang.Void>);
    descriptor: (Lcom/mongodb/internal/connection/AsynchronousChannelStream$AsyncWritableByteChannelAdapter;Lorg/bson/ByteBuf;Lcom/mongodb/connection/AsyncCompletionHandler;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=4, args_size=4
        start local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
        start local 1 // com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter byteChannel
        start local 2 // org.bson.ByteBuf byteBuffer
        start local 3 // com.mongodb.connection.AsyncCompletionHandler outerHandler
         0: .line 171
            aload 1 /* byteChannel */
            aload 2 /* byteBuffer */
            invokeinterface org.bson.ByteBuf.asNIO:()Ljava/nio/ByteBuffer;
            new com.mongodb.internal.connection.AsynchronousChannelStream$2
            dup
            aload 0 /* this */
            aload 2 /* byteBuffer */
            aload 1 /* byteChannel */
            aload 3 /* outerHandler */
            invokespecial com.mongodb.internal.connection.AsynchronousChannelStream$2.<init>:(Lcom/mongodb/internal/connection/AsynchronousChannelStream;Lorg/bson/ByteBuf;Lcom/mongodb/internal/connection/AsynchronousChannelStream$AsyncWritableByteChannelAdapter;Lcom/mongodb/connection/AsyncCompletionHandler;)V
            invokevirtual com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter.write:(Ljava/nio/ByteBuffer;Lcom/mongodb/connection/AsyncCompletionHandler;)V
         1: .line 186
            return
        end local 3 // com.mongodb.connection.AsyncCompletionHandler outerHandler
        end local 2 // org.bson.ByteBuf byteBuffer
        end local 1 // com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter byteChannel
        end local 0 // com.mongodb.internal.connection.AsynchronousChannelStream this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lcom/mongodb/internal/connection/AsynchronousChannelStream;
            0    2     1   byteChannel  Lcom/mongodb/internal/connection/AsynchronousChannelStream$AsyncWritableByteChannelAdapter;
            0    2     2    byteBuffer  Lorg/bson/ByteBuf;
            0    2     3  outerHandler  Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;
    Signature: (Lcom/mongodb/internal/connection/AsynchronousChannelStream$AsyncWritableByteChannelAdapter;Lorg/bson/ByteBuf;Lcom/mongodb/connection/AsyncCompletionHandler<Ljava/lang/Void;>;)V
    MethodParameters:
              Name  Flags
      byteChannel   final
      byteBuffer    final
      outerHandler  final
}
SourceFile: "AsynchronousChannelStream.java"
NestMembers:
  com.mongodb.internal.connection.AsynchronousChannelStream$1  com.mongodb.internal.connection.AsynchronousChannelStream$2  com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter  com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter$WriteCompletionHandler  com.mongodb.internal.connection.AsynchronousChannelStream$BaseCompletionHandler  com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler  com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler
InnerClasses:
  com.mongodb.internal.connection.AsynchronousChannelStream$1
  com.mongodb.internal.connection.AsynchronousChannelStream$2
  private AsyncWritableByteChannelAdapter = com.mongodb.internal.connection.AsynchronousChannelStream$AsyncWritableByteChannelAdapter of com.mongodb.internal.connection.AsynchronousChannelStream
  private abstract BaseCompletionHandler = com.mongodb.internal.connection.AsynchronousChannelStream$BaseCompletionHandler of com.mongodb.internal.connection.AsynchronousChannelStream
  private final BasicCompletionHandler = com.mongodb.internal.connection.AsynchronousChannelStream$BasicCompletionHandler of com.mongodb.internal.connection.AsynchronousChannelStream
  FutureAsyncCompletionHandler = com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler of com.mongodb.internal.connection.AsynchronousChannelStream