public abstract class org.jruby.util.IOChannel implements java.nio.channels.Channel
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: org.jruby.util.IOChannel
  super_class: java.lang.Object
{
  private final org.jruby.runtime.builtin.IRubyObject io;
    descriptor: Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.jruby.runtime.CallSite closeAdapter;
    descriptor: Lorg/jruby/runtime/CallSite;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.jruby.runtime.callsite.RespondToCallSite respondToClosed;
    descriptor: Lorg/jruby/runtime/callsite/RespondToCallSite;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.jruby.runtime.CallSite isClosedAdapter;
    descriptor: Lorg/jruby/runtime/CallSite;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.jruby.Ruby runtime;
    descriptor: Lorg/jruby/Ruby;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  protected void <init>(org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.util.IOChannel this
        start local 1 // org.jruby.runtime.builtin.IRubyObject io
         0: .line 59
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 54
            aload 0 /* this */
            ldc "close"
            invokestatic org.jruby.runtime.MethodIndex.getFunctionalCallSite:(Ljava/lang/String;)Lorg/jruby/runtime/CallSite;
            putfield org.jruby.util.IOChannel.closeAdapter:Lorg/jruby/runtime/CallSite;
         2: .line 55
            aload 0 /* this */
            new org.jruby.runtime.callsite.RespondToCallSite
            dup
            ldc "closed?"
            invokespecial org.jruby.runtime.callsite.RespondToCallSite.<init>:(Ljava/lang/String;)V
            putfield org.jruby.util.IOChannel.respondToClosed:Lorg/jruby/runtime/callsite/RespondToCallSite;
         3: .line 56
            aload 0 /* this */
            ldc "closed?"
            invokestatic org.jruby.runtime.MethodIndex.getFunctionalCallSite:(Ljava/lang/String;)Lorg/jruby/runtime/CallSite;
            putfield org.jruby.util.IOChannel.isClosedAdapter:Lorg/jruby/runtime/CallSite;
         4: .line 60
            aload 0 /* this */
            aload 1 /* io */
            putfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
         5: .line 61
            aload 0 /* this */
            aload 1 /* io */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getRuntime:()Lorg/jruby/Ruby;
            putfield org.jruby.util.IOChannel.runtime:Lorg/jruby/Ruby;
         6: .line 62
            return
        end local 1 // org.jruby.runtime.builtin.IRubyObject io
        end local 0 // org.jruby.util.IOChannel this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/jruby/util/IOChannel;
            0    7     1    io  Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
      Name  Flags
      io    final

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // org.jruby.util.IOChannel this
         0: .line 65
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            astore 1 /* context */
        start local 1 // org.jruby.runtime.ThreadContext context
         1: .line 68
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            ldc "close"
            invokeinterface org.jruby.runtime.builtin.IRubyObject.respondsTo:(Ljava/lang/String;)Z
            ifeq 3
         2: .line 69
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.closeAdapter:Lorg/jruby/runtime/CallSite;
            aload 1 /* context */
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            invokevirtual org.jruby.runtime.CallSite.call:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         3: .line 73
      StackMap locals: org.jruby.runtime.ThreadContext
      StackMap stack:
            return
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.IOChannel this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lorg/jruby/util/IOChannel;
            1    4     1  context  Lorg/jruby/runtime/ThreadContext;
    Exceptions:
      throws java.io.IOException

  public boolean isOpen();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // org.jruby.util.IOChannel this
         0: .line 76
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            astore 1 /* context */
        start local 1 // org.jruby.runtime.ThreadContext context
         1: .line 78
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.respondToClosed:Lorg/jruby/runtime/callsite/RespondToCallSite;
            aload 1 /* context */
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            invokevirtual org.jruby.runtime.callsite.RespondToCallSite.respondsTo:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Z
            ifeq 5
         2: .line 79
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.isClosedAdapter:Lorg/jruby/runtime/CallSite;
            aload 1 /* context */
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            invokevirtual org.jruby.runtime.CallSite.call:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isTrue:()Z
            ifeq 3
            iconst_0
            goto 4
      StackMap locals: org.jruby.runtime.ThreadContext
      StackMap stack:
         3: iconst_1
      StackMap locals:
      StackMap stack: int
         4: ireturn
         5: .line 83
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.IOChannel this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/jruby/util/IOChannel;
            1    6     1  context  Lorg/jruby/runtime/ThreadContext;

  protected int read(org.jruby.runtime.CallSite, java.nio.ByteBuffer);
    descriptor: (Lorg/jruby/runtime/CallSite;Ljava/nio/ByteBuffer;)I
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=6, args_size=3
        start local 0 // org.jruby.util.IOChannel this
        start local 1 // org.jruby.runtime.CallSite read
        start local 2 // java.nio.ByteBuffer dst
         0: .line 87
            aload 1 /* read */
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.runtime:Lorg/jruby/Ruby;
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            invokevirtual org.jruby.Ruby.newFixnum:(I)Lorg/jruby/RubyFixnum;
            invokevirtual org.jruby.runtime.CallSite.call:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 3 /* readValue */
        start local 3 // org.jruby.runtime.builtin.IRubyObject readValue
         1: .line 88
            iconst_m1
            istore 4 /* returnValue */
        start local 4 // int returnValue
         2: .line 89
            aload 3 /* readValue */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifne 6
         3: .line 90
            aload 3 /* readValue */
            checkcast org.jruby.RubyString
            invokevirtual org.jruby.RubyString.getByteList:()Lorg/jruby/util/ByteList;
            astore 5 /* str */
        start local 5 // org.jruby.util.ByteList str
         4: .line 91
            aload 2 /* dst */
            aload 5 /* str */
            invokevirtual org.jruby.util.ByteList.getUnsafeBytes:()[B
            aload 5 /* str */
            invokevirtual org.jruby.util.ByteList.getBegin:()I
            aload 5 /* str */
            invokevirtual org.jruby.util.ByteList.getRealSize:()I
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
         5: .line 92
            aload 5 /* str */
            invokevirtual org.jruby.util.ByteList.getRealSize:()I
            istore 4 /* returnValue */
        end local 5 // org.jruby.util.ByteList str
         6: .line 94
      StackMap locals: org.jruby.runtime.builtin.IRubyObject int
      StackMap stack:
            iload 4 /* returnValue */
            ireturn
        end local 4 // int returnValue
        end local 3 // org.jruby.runtime.builtin.IRubyObject readValue
        end local 2 // java.nio.ByteBuffer dst
        end local 1 // org.jruby.runtime.CallSite read
        end local 0 // org.jruby.util.IOChannel this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Lorg/jruby/util/IOChannel;
            0    7     1         read  Lorg/jruby/runtime/CallSite;
            0    7     2          dst  Ljava/nio/ByteBuffer;
            1    7     3    readValue  Lorg/jruby/runtime/builtin/IRubyObject;
            2    7     4  returnValue  I
            4    6     5          str  Lorg/jruby/util/ByteList;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      read  
      dst   

  protected int write(org.jruby.runtime.CallSite, java.nio.ByteBuffer);
    descriptor: (Lorg/jruby/runtime/CallSite;Ljava/nio/ByteBuffer;)I
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=5, args_size=3
        start local 0 // org.jruby.util.IOChannel this
        start local 1 // org.jruby.runtime.CallSite write
        start local 2 // java.nio.ByteBuffer src
         0: .line 100
            aload 2 /* src */
            invokevirtual java.nio.ByteBuffer.hasArray:()Z
            ifeq 3
         1: .line 101
            new org.jruby.util.ByteList
            dup
            aload 2 /* src */
            invokevirtual java.nio.ByteBuffer.array:()[B
            aload 2 /* src */
            invokevirtual java.nio.ByteBuffer.position:()I
            aload 2 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            iconst_1
            invokespecial org.jruby.util.ByteList.<init>:([BIIZ)V
            astore 3 /* buffer */
        start local 3 // org.jruby.util.ByteList buffer
         2: .line 102
            goto 5
        end local 3 // org.jruby.util.ByteList buffer
         3: .line 103
      StackMap locals:
      StackMap stack:
            new org.jruby.util.ByteList
            dup
            aload 2 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            invokespecial org.jruby.util.ByteList.<init>:(I)V
            astore 3 /* buffer */
        start local 3 // org.jruby.util.ByteList buffer
         4: .line 104
            aload 3 /* buffer */
            aload 2 /* src */
            aload 2 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            invokevirtual org.jruby.util.ByteList.append:(Ljava/nio/ByteBuffer;I)V
         5: .line 106
      StackMap locals: org.jruby.util.ByteList
      StackMap stack:
            aload 1 /* write */
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.runtime:Lorg/jruby/Ruby;
            aload 3 /* buffer */
            invokestatic org.jruby.RubyString.newStringLight:(Lorg/jruby/Ruby;Lorg/jruby/util/ByteList;)Lorg/jruby/RubyString;
            invokevirtual org.jruby.runtime.CallSite.call:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 4 /* written */
        start local 4 // org.jruby.runtime.builtin.IRubyObject written
         6: .line 107
            aload 4 /* written */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.convertToInteger:()Lorg/jruby/RubyInteger;
            invokevirtual org.jruby.RubyInteger.getLongValue:()J
            l2i
            ireturn
        end local 4 // org.jruby.runtime.builtin.IRubyObject written
        end local 3 // org.jruby.util.ByteList buffer
        end local 2 // java.nio.ByteBuffer src
        end local 1 // org.jruby.runtime.CallSite write
        end local 0 // org.jruby.util.IOChannel this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0     this  Lorg/jruby/util/IOChannel;
            0    7     1    write  Lorg/jruby/runtime/CallSite;
            0    7     2      src  Ljava/nio/ByteBuffer;
            2    3     3   buffer  Lorg/jruby/util/ByteList;
            4    7     3   buffer  Lorg/jruby/util/ByteList;
            6    7     4  written  Lorg/jruby/runtime/builtin/IRubyObject;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      write  
      src    

  protected org.jruby.runtime.CallSite initReadSite(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/jruby/runtime/CallSite;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.util.IOChannel this
        start local 1 // java.lang.String readMethod
         0: .line 112
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            aload 1 /* readMethod */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.respondsTo:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 113
            aload 1 /* readMethod */
            invokestatic org.jruby.runtime.MethodIndex.getFunctionalCallSite:(Ljava/lang/String;)Lorg/jruby/runtime/CallSite;
            areturn
         2: .line 115
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getMetaClass:()Lorg/jruby/RubyClass;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "not coercible to "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ": no `"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* readMethod */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "' method"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.String readMethod
        end local 0 // org.jruby.util.IOChannel this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0        this  Lorg/jruby/util/IOChannel;
            0    3     1  readMethod  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      readMethod  

  protected org.jruby.runtime.CallSite initWriteSite();
    descriptor: ()Lorg/jruby/runtime/CallSite;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.jruby.util.IOChannel this
         0: .line 121
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            ldc "write"
            invokeinterface org.jruby.runtime.builtin.IRubyObject.respondsTo:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 122
            ldc "write"
            invokestatic org.jruby.runtime.MethodIndex.getFunctionalCallSite:(Ljava/lang/String;)Lorg/jruby/runtime/CallSite;
            areturn
         2: .line 123
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            ldc "<<"
            invokeinterface org.jruby.runtime.builtin.IRubyObject.respondsTo:(Ljava/lang/String;)Z
            ifeq 4
         3: .line 124
            ldc "<<"
            invokestatic org.jruby.runtime.MethodIndex.getFunctionalCallSite:(Ljava/lang/String;)Lorg/jruby/runtime/CallSite;
            areturn
         4: .line 126
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            aload 0 /* this */
            getfield org.jruby.util.IOChannel.io:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getMetaClass:()Lorg/jruby/RubyClass;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "not coercible to "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ": no `write' method"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // org.jruby.util.IOChannel this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/jruby/util/IOChannel;
}
SourceFile: "IOChannel.java"
NestMembers:
  org.jruby.util.IOChannel$IOReadableByteChannel  org.jruby.util.IOChannel$IOReadableWritableByteChannel  org.jruby.util.IOChannel$IOWritableByteChannel
InnerClasses:
  public IOReadableByteChannel = org.jruby.util.IOChannel$IOReadableByteChannel of org.jruby.util.IOChannel
  public IOReadableWritableByteChannel = org.jruby.util.IOChannel$IOReadableWritableByteChannel of org.jruby.util.IOChannel
  public IOWritableByteChannel = org.jruby.util.IOChannel$IOWritableByteChannel of org.jruby.util.IOChannel