public class java.util.Base64$Decoder
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: java.util.Base64$Decoder
super_class: java.lang.Object
{
private final boolean isURL;
descriptor: Z
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final boolean isMIME;
descriptor: Z
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private static final int[] fromBase64;
descriptor: [I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final int[] fromBase64URL;
descriptor: [I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static final java.util.Base64$Decoder RFC4648;
descriptor: Ljava/util/Base64$Decoder;
flags: (0x0018) ACC_STATIC, ACC_FINAL
static final java.util.Base64$Decoder RFC4648_URLSAFE;
descriptor: Ljava/util/Base64$Decoder;
flags: (0x0018) ACC_STATIC, ACC_FINAL
static final java.util.Base64$Decoder RFC2045;
descriptor: Ljava/util/Base64$Decoder;
flags: (0x0018) ACC_STATIC, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=4, locals=1, args_size=0
0: sipush 256
newarray 10
putstatic java.util.Base64$Decoder.fromBase64:[I
1: getstatic java.util.Base64$Decoder.fromBase64:[I
iconst_m1
invokestatic java.util.Arrays.fill:([II)V
2: iconst_0
istore 0
start local 0 3: goto 6
4: StackMap locals: int
StackMap stack:
getstatic java.util.Base64$Decoder.fromBase64:[I
getstatic java.util.Base64$Encoder.toBase64:[C
iload 0
caload
iload 0
iastore
5: iinc 0 1
StackMap locals:
StackMap stack:
6: iload 0
getstatic java.util.Base64$Encoder.toBase64:[C
arraylength
if_icmplt 4
end local 0 7: getstatic java.util.Base64$Decoder.fromBase64:[I
bipush 61
bipush -2
iastore
8: sipush 256
newarray 10
putstatic java.util.Base64$Decoder.fromBase64URL:[I
9: getstatic java.util.Base64$Decoder.fromBase64URL:[I
iconst_m1
invokestatic java.util.Arrays.fill:([II)V
10: iconst_0
istore 0
start local 0 11: goto 14
12: StackMap locals:
StackMap stack:
getstatic java.util.Base64$Decoder.fromBase64URL:[I
getstatic java.util.Base64$Encoder.toBase64URL:[C
iload 0
caload
iload 0
iastore
13: iinc 0 1
StackMap locals:
StackMap stack:
14: iload 0
getstatic java.util.Base64$Encoder.toBase64URL:[C
arraylength
if_icmplt 12
end local 0 15: getstatic java.util.Base64$Decoder.fromBase64URL:[I
bipush 61
bipush -2
iastore
16: new java.util.Base64$Decoder
dup
iconst_0
iconst_0
invokespecial java.util.Base64$Decoder.<init>:(ZZ)V
putstatic java.util.Base64$Decoder.RFC4648:Ljava/util/Base64$Decoder;
17: new java.util.Base64$Decoder
dup
iconst_1
iconst_0
invokespecial java.util.Base64$Decoder.<init>:(ZZ)V
putstatic java.util.Base64$Decoder.RFC4648_URLSAFE:Ljava/util/Base64$Decoder;
18: new java.util.Base64$Decoder
dup
iconst_0
iconst_1
invokespecial java.util.Base64$Decoder.<init>:(ZZ)V
putstatic java.util.Base64$Decoder.RFC2045:Ljava/util/Base64$Decoder;
return
LocalVariableTable:
Start End Slot Name Signature
3 7 0 i I
11 15 0 i I
private void <init>(boolean, boolean);
descriptor: (ZZ)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
iload 1
putfield java.util.Base64$Decoder.isURL:Z
2: aload 0
iload 2
putfield java.util.Base64$Decoder.isMIME:Z
3: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Ljava/util/Base64$Decoder;
0 4 1 isURL Z
0 4 2 isMIME Z
MethodParameters:
Name Flags
isURL
isMIME
public byte[] decode(byte[]);
descriptor: ([B)[B
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=4, args_size=2
start local 0 start local 1 0: aload 0
aload 1
iconst_0
aload 1
arraylength
invokevirtual java.util.Base64$Decoder.outLength:([BII)I
newarray 8
astore 2
start local 2 1: aload 0
aload 1
iconst_0
aload 1
arraylength
aload 2
invokevirtual java.util.Base64$Decoder.decode0:([BII[B)I
istore 3
start local 3 2: iload 3
aload 2
arraylength
if_icmpeq 4
3: aload 2
iload 3
invokestatic java.util.Arrays.copyOf:([BI)[B
astore 2
4: StackMap locals: byte[] int
StackMap stack:
aload 2
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Ljava/util/Base64$Decoder;
0 5 1 src [B
1 5 2 dst [B
2 5 3 ret I
MethodParameters:
Name Flags
src
public byte[] decode(java.lang.String);
descriptor: (Ljava/lang/String;)[B
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
aload 1
getstatic java.nio.charset.StandardCharsets.ISO_8859_1:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
invokevirtual java.util.Base64$Decoder.decode:([B)[B
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Ljava/util/Base64$Decoder;
0 1 1 src Ljava/lang/String;
MethodParameters:
Name Flags
src
public int decode(byte[], byte[]);
descriptor: ([B[B)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
aload 1
iconst_0
aload 1
arraylength
invokevirtual java.util.Base64$Decoder.outLength:([BII)I
istore 3
start local 3 1: aload 2
arraylength
iload 3
if_icmpge 5
2: new java.lang.IllegalArgumentException
dup
3: ldc "Output byte array is too small for decoding all input bytes"
4: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
5: StackMap locals: int
StackMap stack:
aload 0
aload 1
iconst_0
aload 1
arraylength
aload 2
invokevirtual java.util.Base64$Decoder.decode0:([BII[B)I
ireturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Ljava/util/Base64$Decoder;
0 6 1 src [B
0 6 2 dst [B
1 6 3 len I
MethodParameters:
Name Flags
src
dst
public java.nio.ByteBuffer decode(java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=7, args_size=2
start local 0 start local 1 0: aload 1
invokevirtual java.nio.ByteBuffer.position:()I
istore 2
start local 2 1: aload 1
invokevirtual java.nio.ByteBuffer.hasArray:()Z
ifeq 7
2: aload 1
invokevirtual java.nio.ByteBuffer.array:()[B
astore 3
start local 3 3: aload 1
invokevirtual java.nio.ByteBuffer.arrayOffset:()I
aload 1
invokevirtual java.nio.ByteBuffer.position:()I
iadd
istore 4
start local 4 4: aload 1
invokevirtual java.nio.ByteBuffer.arrayOffset:()I
aload 1
invokevirtual java.nio.ByteBuffer.limit:()I
iadd
istore 5
start local 5 5: aload 1
aload 1
invokevirtual java.nio.ByteBuffer.limit:()I
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
pop
6: goto 11
end local 5 end local 4 end local 3 7: StackMap locals: int
StackMap stack:
aload 1
invokevirtual java.nio.ByteBuffer.remaining:()I
newarray 8
astore 3
start local 3 8: aload 1
aload 3
invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
pop
9: iconst_0
istore 4
start local 4 10: aload 3
arraylength
istore 5
start local 5 11: StackMap locals: byte[] int int
StackMap stack:
aload 0
aload 3
iload 4
iload 5
invokevirtual java.util.Base64$Decoder.outLength:([BII)I
newarray 8
astore 6
start local 6 12: aload 6
iconst_0
aload 0
aload 3
iload 4
iload 5
aload 6
invokevirtual java.util.Base64$Decoder.decode0:([BII[B)I
invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
13: areturn
end local 6 end local 5 end local 4 end local 3 14: StackMap locals: java.util.Base64$Decoder java.nio.ByteBuffer int
StackMap stack: java.lang.IllegalArgumentException
astore 3
start local 3 15: aload 1
iload 2
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
pop
16: aload 3
athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 17 0 this Ljava/util/Base64$Decoder;
0 17 1 buffer Ljava/nio/ByteBuffer;
1 17 2 pos0 I
3 7 3 src [B
8 14 3 src [B
4 7 4 sp I
10 14 4 sp I
5 7 5 sl I
11 14 5 sl I
12 14 6 dst [B
15 17 3 iae Ljava/lang/IllegalArgumentException;
Exception table:
from to target type
1 13 14 Class java.lang.IllegalArgumentException
MethodParameters:
Name Flags
buffer
public java.io.InputStream wrap(java.io.InputStream);
descriptor: (Ljava/io/InputStream;)Ljava/io/InputStream;
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=2, args_size=2
start local 0 start local 1 0: aload 1
invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
pop
1: new java.util.Base64$DecInputStream
dup
aload 1
aload 0
getfield java.util.Base64$Decoder.isURL:Z
ifeq 2
getstatic java.util.Base64$Decoder.fromBase64URL:[I
goto 3
StackMap locals: java.util.Base64$Decoder java.io.InputStream
StackMap stack: new 1 new 1 java.io.InputStream
2: getstatic java.util.Base64$Decoder.fromBase64:[I
StackMap locals: java.util.Base64$Decoder java.io.InputStream
StackMap stack: new 1 new 1 java.io.InputStream int[]
3: aload 0
getfield java.util.Base64$Decoder.isMIME:Z
invokespecial java.util.Base64$DecInputStream.<init>:(Ljava/io/InputStream;[IZ)V
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Ljava/util/Base64$Decoder;
0 4 1 is Ljava/io/InputStream;
MethodParameters:
Name Flags
is
private int outLength(byte[], int, int);
descriptor: ([BII)I
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=9, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield java.util.Base64$Decoder.isURL:Z
ifeq 1
getstatic java.util.Base64$Decoder.fromBase64URL:[I
goto 2
StackMap locals:
StackMap stack:
1: getstatic java.util.Base64$Decoder.fromBase64:[I
StackMap locals:
StackMap stack: int[]
2: astore 4
start local 4 3: iconst_0
istore 5
start local 5 4: iload 3
iload 2
isub
istore 6
start local 6 5: iload 6
ifne 7
6: iconst_0
ireturn
7: StackMap locals: int[] int int
StackMap stack:
iload 6
iconst_2
if_icmpge 13
8: aload 0
getfield java.util.Base64$Decoder.isMIME:Z
ifeq 10
aload 4
iconst_0
iaload
iconst_m1
if_icmpne 10
9: iconst_0
ireturn
10: StackMap locals:
StackMap stack:
new java.lang.IllegalArgumentException
dup
11: ldc "Input byte[] should at least have 2 bytes for base64 bytes"
12: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
13: StackMap locals:
StackMap stack:
aload 0
getfield java.util.Base64$Decoder.isMIME:Z
ifeq 25
14: iconst_0
istore 7
start local 7 15: goto 22
16: StackMap locals: int
StackMap stack:
aload 1
iload 2
iinc 2 1
baload
sipush 255
iand
istore 8
start local 8 17: iload 8
bipush 61
if_icmpne 20
18: iload 6
iload 3
iload 2
isub
iconst_1
iadd
isub
istore 6
19: goto 23
20: StackMap locals: int
StackMap stack:
aload 4
iload 8
iaload
dup
istore 8
iconst_m1
if_icmpne 22
21: iinc 7 1
end local 8 22: StackMap locals:
StackMap stack:
iload 2
iload 3
if_icmplt 16
23: StackMap locals:
StackMap stack:
iload 6
iload 7
isub
istore 6
end local 7 24: goto 29
25: StackMap locals:
StackMap stack:
aload 1
iload 3
iconst_1
isub
baload
bipush 61
if_icmpne 29
26: iinc 5 1
27: aload 1
iload 3
iconst_2
isub
baload
bipush 61
if_icmpne 29
28: iinc 5 1
29: StackMap locals:
StackMap stack:
iload 5
ifne 31
iload 6
iconst_3
iand
ifeq 31
30: iconst_4
iload 6
iconst_3
iand
isub
istore 5
31: StackMap locals:
StackMap stack:
iconst_3
iload 6
iconst_3
iadd
iconst_4
idiv
imul
iload 5
isub
ireturn
end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 32 0 this Ljava/util/Base64$Decoder;
0 32 1 src [B
0 32 2 sp I
0 32 3 sl I
3 32 4 base64 [I
4 32 5 paddings I
5 32 6 len I
15 24 7 n I
17 22 8 b I
MethodParameters:
Name Flags
src
sp
sl
private int decode0(byte[], int, int, byte[]);
descriptor: ([BII[B)I
flags: (0x0002) ACC_PRIVATE
Code:
stack=6, locals=10, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: aload 0
getfield java.util.Base64$Decoder.isURL:Z
ifeq 1
getstatic java.util.Base64$Decoder.fromBase64URL:[I
goto 2
StackMap locals:
StackMap stack:
1: getstatic java.util.Base64$Decoder.fromBase64:[I
StackMap locals:
StackMap stack: int[]
2: astore 5
start local 5 3: iconst_0
istore 6
start local 6 4: iconst_0
istore 7
start local 7 5: bipush 18
istore 8
start local 8 6: goto 30
7: StackMap locals: java.util.Base64$Decoder byte[] int int byte[] int[] int int int
StackMap stack:
aload 1
iload 2
iinc 2 1
baload
sipush 255
iand
istore 9
start local 9 8: aload 5
iload 9
iaload
dup
istore 9
ifge 22
9: iload 9
bipush -2
if_icmpne 15
10: iload 8
bipush 6
if_icmpne 11
iload 2
iload 3
if_icmpeq 12
aload 1
iload 2
iinc 2 1
baload
bipush 61
if_icmpne 12
11: StackMap locals: int
StackMap stack:
iload 8
bipush 18
if_icmpne 31
12: StackMap locals:
StackMap stack:
new java.lang.IllegalArgumentException
dup
13: ldc "Input byte array has wrong 4-byte ending unit"
14: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
15: StackMap locals:
StackMap stack:
aload 0
getfield java.util.Base64$Decoder.isMIME:Z
ifeq 17
16: goto 30
17: StackMap locals:
StackMap stack:
new java.lang.IllegalArgumentException
dup
18: new java.lang.StringBuilder
dup
ldc "Illegal base64 character "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
19: aload 1
iload 2
iconst_1
isub
baload
bipush 16
invokestatic java.lang.Integer.toString:(II)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
21: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
22: StackMap locals:
StackMap stack:
iload 7
iload 9
iload 8
ishl
ior
istore 7
23: iinc 8 -6
24: iload 8
ifge 30
25: aload 4
iload 6
iinc 6 1
iload 7
bipush 16
ishr
i2b
bastore
26: aload 4
iload 6
iinc 6 1
iload 7
bipush 8
ishr
i2b
bastore
27: aload 4
iload 6
iinc 6 1
iload 7
i2b
bastore
28: bipush 18
istore 8
29: iconst_0
istore 7
end local 9 30: StackMap locals:
StackMap stack:
iload 2
iload 3
if_icmplt 7
31: StackMap locals:
StackMap stack:
iload 8
bipush 6
if_icmpne 34
32: aload 4
iload 6
iinc 6 1
iload 7
bipush 16
ishr
i2b
bastore
33: goto 47
StackMap locals:
StackMap stack:
34: iload 8
ifne 38
35: aload 4
iload 6
iinc 6 1
iload 7
bipush 16
ishr
i2b
bastore
36: aload 4
iload 6
iinc 6 1
iload 7
bipush 8
ishr
i2b
bastore
37: goto 47
StackMap locals:
StackMap stack:
38: iload 8
bipush 12
if_icmpne 47
39: new java.lang.IllegalArgumentException
dup
40: ldc "Last unit does not have enough valid bits"
41: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
42: StackMap locals:
StackMap stack:
aload 0
getfield java.util.Base64$Decoder.isMIME:Z
ifeq 44
aload 5
aload 1
iload 2
iinc 2 1
baload
iaload
ifge 44
43: goto 47
44: StackMap locals:
StackMap stack:
new java.lang.IllegalArgumentException
dup
45: new java.lang.StringBuilder
dup
ldc "Input byte array has incorrect ending byte at "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 2
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
46: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
47: StackMap locals:
StackMap stack:
iload 2
iload 3
if_icmplt 42
48: iload 6
ireturn
end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 49 0 this Ljava/util/Base64$Decoder;
0 49 1 src [B
0 49 2 sp I
0 49 3 sl I
0 49 4 dst [B
3 49 5 base64 [I
4 49 6 dp I
5 49 7 bits I
6 49 8 shiftto I
8 30 9 b I
MethodParameters:
Name Flags
src
sp
sl
dst
}
SourceFile: "Base64.java"
NestHost: java.util.Base64
InnerClasses:
private DecInputStream = java.util.Base64$DecInputStream of java.util.Base64
public Decoder = java.util.Base64$Decoder of java.util.Base64
public Encoder = java.util.Base64$Encoder of java.util.Base64