`
- 浏览:
192195 次
- 性别:
-
java 代码
-
-
-
-
-
- package sun.misc;
-
- import java.io.*;
- import java.nio.ByteBuffer;
-
-
-
-
- public abstract class CharacterDecoder
- {
-
- public CharacterDecoder()
- {
- }
-
- protected abstract int bytesPerAtom();
-
- protected abstract int bytesPerLine();
-
- protected void decodeBufferPrefix(PushbackInputStream pushbackinputstream, OutputStream outputstream)
- throws IOException
- {
- }
-
- protected void decodeBufferSuffix(PushbackInputStream pushbackinputstream, OutputStream outputstream)
- throws IOException
- {
- }
-
- protected int decodeLinePrefix(PushbackInputStream pushbackinputstream, OutputStream outputstream)
- throws IOException
- {
- return bytesPerLine();
- }
-
- protected void decodeLineSuffix(PushbackInputStream pushbackinputstream, OutputStream outputstream)
- throws IOException
- {
- }
-
- protected void decodeAtom(PushbackInputStream pushbackinputstream, OutputStream outputstream, int i)
- throws IOException
- {
- throw new CEStreamExhausted();
- }
-
- protected int readFully(InputStream inputstream, byte abyte0[], int i, int j)
- throws IOException
- {
- for(int k = 0; k < j; k++)
- {
- int l = inputstream.read();
- if(l == -1)
- return k != 0 ? k : -1;
- abyte0[k + i] = (byte)l;
- }
-
- return j;
- }
-
- public void decodeBuffer(InputStream inputstream, OutputStream outputstream)
- throws IOException
- {
- int j = 0;
- PushbackInputStream pushbackinputstream = new PushbackInputStream(inputstream);
- decodeBufferPrefix(pushbackinputstream, outputstream);
- try
- {
- do
- {
- int k = decodeLinePrefix(pushbackinputstream, outputstream);
- int i;
- for(i = 0; i + bytesPerAtom() < k; i += bytesPerAtom())
- {
- decodeAtom(pushbackinputstream, outputstream, bytesPerAtom());
- j += bytesPerAtom();
- }
-
- if(i + bytesPerAtom() == k)
- {
- decodeAtom(pushbackinputstream, outputstream, bytesPerAtom());
- j += bytesPerAtom();
- } else
- {
- decodeAtom(pushbackinputstream, outputstream, k - i);
- j += k - i;
- }
- decodeLineSuffix(pushbackinputstream, outputstream);
- } while(true);
- }
- catch(CEStreamExhausted cestreamexhausted)
- {
- decodeBufferSuffix(pushbackinputstream, outputstream);
- }
- }
-
- public byte[] decodeBuffer(String s)
- throws IOException
- {
- byte abyte0[] = new byte[s.length()];
- s.getBytes(0, s.length(), abyte0, 0);
- ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(abyte0);
- ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
- decodeBuffer(((InputStream) (bytearrayinputstream)), ((OutputStream) (bytearrayoutputstream)));
- return bytearrayoutputstream.toByteArray();
- }
-
- public byte[] decodeBuffer(InputStream inputstream)
- throws IOException
- {
- ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
- decodeBuffer(inputstream, ((OutputStream) (bytearrayoutputstream)));
- return bytearrayoutputstream.toByteArray();
- }
-
- public ByteBuffer decodeBufferToByteBuffer(String s)
- throws IOException
- {
- return ByteBuffer.wrap(decodeBuffer(s));
- }
-
- public ByteBuffer decodeBufferToByteBuffer(InputStream inputstream)
- throws IOException
- {
- return ByteBuffer.wrap(decodeBuffer(inputstream));
- }
- }
-
-
-
-
-
-
-
- package sun.misc;
-
- import java.io.*;
-
-
-
-
- public class BASE64Decoder extends CharacterDecoder
- {
-
- public BASE64Decoder()
- {
- decode_buffer = new byte[4];
- }
-
- protected int bytesPerAtom()
- {
- return 4;
- }
-
- protected int bytesPerLine()
- {
- return 72;
- }
-
- protected void decodeAtom(PushbackInputStream pushbackinputstream, OutputStream outputstream, int i)
- throws IOException
- {
- byte byte0 = -1;
- byte byte1 = -1;
- byte byte2 = -1;
- byte byte3 = -1;
- if(i < 2)
- throw new CEFormatException("BASE64Decoder: Not enough bytes for an atom.");
- int j;
- do
- {
- j = pushbackinputstream.read();
- if(j == -1)
- throw new CEStreamExhausted();
- } while(j == 10 || j == 13);
- decode_buffer[0] = (byte)j;
- j = readFully(pushbackinputstream, decode_buffer, 1, i - 1);
- if(j == -1)
- throw new CEStreamExhausted();
- if(i > 3 && decode_buffer[3] == 61)
- i = 3;
- if(i > 2 && decode_buffer[2] == 61)
- i = 2;
- switch(i)
- {
- case 4:
- byte3 = pem_convert_array[decode_buffer[3] & 0xff];
-
-
- case 3:
- byte2 = pem_convert_array[decode_buffer[2] & 0xff];
-
-
- case 2:
- byte1 = pem_convert_array[decode_buffer[1] & 0xff];
- byte0 = pem_convert_array[decode_buffer[0] & 0xff];
-
-
- default:
- switch(i)
- {
- case 2:
- outputstream.write((byte)(byte0 << 2 & 0xfc | byte1 >>> 4 & 3));
- break;
-
- case 3:
- outputstream.write((byte)(byte0 << 2 & 0xfc | byte1 >>> 4 & 3));
- outputstream.write((byte)(byte1 << 4 & 0xf0 | byte2 >>> 2 & 0xf));
- break;
-
- case 4:
- outputstream.write((byte)(byte0 << 2 & 0xfc | byte1 >>> 4 & 3));
- outputstream.write((byte)(byte1 << 4 & 0xf0 | byte2 >>> 2 & 0xf));
- outputstream.write((byte)(byte2 << 6 & 0xc0 | byte3 & 0x3f));
- break;
- }
- break;
- }
- }
-
- private static final char pem_array[] = {
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
- 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
- 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
- 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
- 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
- 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', '+', '/'
- };
- private static final byte pem_convert_array[];
- byte decode_buffer[];
-
- static
- {
- pem_convert_array = new byte[256];
- for(int i = 0; i < 255; i++)
- pem_convert_array[i] = -1;
-
- for(int j = 0; j < pem_array.length; j++)
- pem_convert_array[pem_array[j]] = (byte)j;
-
- }
- }
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
而`sun.misc.BASE64Encoder`和`BASE64Decoder`虽然存在潜在问题,但它们可以帮助开发者快速实现Base64编码和解码。为了遵循最佳实践,建议使用`java.util.Base64`包提供的API来替代这些非公开类。
Java 8及以后的版本提供了`java.util.Base64`类,它是官方推荐的Base64编码和解码的标准实现。`java.util.Base64.Decoder`接口提供了与`sun.misc.BASE64Decoder`类似的功能,可以用来解码Base64编码的字符串。例如,...
总的来说,Base64编码和解码是信息技术中基础且重要的概念,`sun.misc.BASE64Decoder`则是Java早期实现Base64解码的一个工具。尽管存在更好的替代方案,理解它的原理和用法仍然是有价值的,特别是在处理旧代码或理解...
通常,这样的类会封装`java.util.Base64`或其他Base64实现,提供方便的静态方法来进行Base64编码和解码操作。 在实际开发中,为了保持代码的兼容性和可维护性,我们应该避免使用`sun.misc`包中的类,而应该使用标准...
在本例中,`sun.misc.BASE64Decoder.jar`可能包含`BASE64Decoder`和`BASE64Encoder`类的实现,供那些仍需使用这些非标准组件的项目使用。 总的来说,尽管`sun.misc.BASE64Decoder`和`BASE64Encoder`在某些老项目中...
`sun.misc.BASE64Encoder`和`sun.misc.BASE64Decoder`就是这样的两个类,它们分别用于Base64编码和解码。 Base64是一种用于将二进制数据转换为可打印ASCII字符的编码方式,常用于在网络上传输二进制数据,如电子...
`sun.misc`包中的这些类是Java早期版本提供的非标准API,主要用于内部使用,但在某些场景下,开发者会利用它们来实现Base64的编码和解码功能。 **Base64编码原理:** Base64编码基于64个可打印的ASCII字符,将每3个...
`sun.misc`包下的`BASE64Decoder`是Java标准库提供的一种实现,但请注意,这个包的内容是非公开的,并且在后续的Java版本中可能会被移除或者改变,因此在实际开发中应避免直接依赖这些类。 首先,我们来了解一下...
这个Java实现的示例提供了RSA加密和解密的功能,并且结合了`sun.misc.BASE64Decoder.jar`来处理Base64编码,使得加密后的密文能够以可读的形式存储和传输。 首先,RSA的核心原理基于大数因子分解的困难性。每个RSA...
《深入理解sun.misc.BASE64Decoder.jar:一个基础的Base64解码工具》 在IT行业中,数据编码和解码是日常开发中不可或缺的一部分,其中Base64编码是一种广泛应用于网络传输和存储中的编码方式。它将二进制数据转化...
【标题】"sun的BASE64Decoder"是一个与编码解码相关的工具,源自sun公司,主要用于处理BASE64编码的数据。BASE64是一种常见的数据编码方式,尤其在互联网通信、文件传输以及电子邮件中广泛使用。它将二进制数据转换...
"Java基于Base64实现编码解码图片文件" Java基于Base64实现编码解码图片文件是Java语言中的一种常见的编码解码实现方式。Base64是一种常用的字符编码,在很多地方都会用到,但它并不是安全领域下的加密解密算法,...
在Java编程语言中,`sun.misc.BASE64Decoder`是一个重要的类,用于处理Base64编码的解码工作。Base64是一种常见的数据编码方法,它将任意的二进制数据转换为ASCII字符串,以便在网络传输或者存储时避免非ASCII字符的...