packagecom.xiaoma.piccut.demo;
/**
* 下面这些注释是下载这个类的时候本来就有的,本来要删除的,但看了下竟然是license,吼吼,
* 好东西,留在注释里,以备不时之用,大家有需要加license的可以到下面的网址找哦
*/
//EPL, Eclipse Public License, V1.0 or later, http://www.eclipse.org/legal
//LGPL, GNU Lesser General Public License, V2.1 or later, http://www.gnu.org/licenses/lgpl.html
//GPL, GNU General Public License, V2 or later, http://www.gnu.org/licenses/gpl.html
//AL, Apache License, V2.0 or later, http://www.apache.org/licenses
//BSD, BSD License, http://www.opensource.org/licenses/bsd-license.php
/**
* A Base64 encoder/decoder.
*
*
* This class is used to encode and decode data in Base64 format as described in RFC 1521.
*
*
* Project home page: www.source-code.biz/base64coder/java
* Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
* Multi-licensed: EPL / LGPL / GPL / AL / BSD.
*/
/**
* 这个类在上面注释的网址中有,大家可以自行下载下,也可以直接用这个,
* 公开的Base64Coder类(不用深究它是怎么实现的,
* 还是那句话,有轮子直接用轮子),好用的要死人了...
* 小马也很无耻的引用了这个网址下的东东,吼吼...
* @Title: Base64Coder.java
* @Package com.xiaoma.piccut.demo
* @Description: TODO
* @author XiaoMa
*/
publicclassBase64Coder {
//The line separator string of the operating system.
privatestaticfinalString systemLineSeparator = System.getProperty('line.separator');
//Mapping table from 6-bit nibbles to Base64 characters.
privatestaticchar[] map1 =newchar[64];
static{
inti=0;
for(charc='A'; c<='Z'; c++) map1[i++] = c;
for(charc='a'; c<='z'; c++) map1[i++] = c;
for(charc='0'; c<='9'; c++) map1[i++] = c;
map1[i++] ='+'; map1[i++] ='/'; }
//Mapping table from Base64 characters to 6-bit nibbles.
privatestaticbyte[] map2 =newbyte[128];
static{
for(inti=0; i
for(inti=0; i<64; i++) map2[map1[i]] = (byte)i; }
/**
* Encodes a string into Base64 format.
* No blanks or line breaks are inserted.
* @param s A String to be encoded.
* @return A String containing the Base64 encoded data.
*/
publicstaticString encodeString (String s) {
returnnewString(encode(s.getBytes())); }
/**
* Encodes a byte array into Base 64 format and breaks the output into lines of 76 characters.
* This method is compatible with sun.misc.BASE64Encoder.encodeBuffer(byte[])
.
* @param in An array containing the data bytes to be encoded.
* @return A String containing the Base64 encoded data, broken into lines.
*/
publicstaticString encodeLines (byte[] in) {
returnencodeLines(in,0, in.length,76, systemLineSeparator); }
/**
* Encodes a byte array into Base 64 format and breaks the output into lines.
* @param in An array containing the data bytes to be encoded.
* @param iOff Offset of the first byte in in
to be processed.
* @param iLen Number of bytes to be processed in in
, starting at iOff
.
* @param lineLen Line length for the output data. Should be a multiple of 4.
* @param lineSeparator The line separator to be used to separate the output lines.
* @return A String containing the Base64 encoded data, broken into lines.
*/
publicstaticString encodeLines (byte[] in,intiOff,intiLen,intlineLen, String lineSeparator) {
intblockLen = (lineLen*3) /4;
if(blockLen <=0)thrownewIllegalArgumentException();
intlines = (iLen+blockLen-1) / blockLen;
intbufLen = ((iLen+2)/3)*4+ lines*lineSeparator.length();
StringBuilder buf =newStringBuilder(bufLen);
intip =0;
while(ip
intl = Math.min(iLen-ip, blockLen);
buf.append (encode(in, iOff+ip, l));
buf.append (lineSeparator);
ip += l; }
returnbuf.toString(); }
/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted in the output.
* @param in An array containing the data bytes to be encoded.
* @return A character array containing the Base64 encoded data.
*/
publicstaticchar[] encode (byte[] in) {
returnencode(in,0, in.length); }
/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted in the output.
* @param in An array containing the data bytes to be encoded.
* @param iLen Number of bytes to process in in
.
* @return A character array containing the Base64 encoded data.
*/
publicstaticchar[] encode (byte[] in,intiLen) {
returnencode(in,0, iLen); }
/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted in the output.
* @param in An array containing the data bytes to be encoded.
* @param iOff Offset of the first byte in in
to be processed.
* @param iLen Number of bytes to process in in
, starting at iOff
.
* @return A character array containing the Base64 encoded data.
*/
publicstaticchar[] encode (byte[] in,intiOff,intiLen) {
intoDataLen = (iLen*4+2)/3;// output length without padding
intoLen = ((iLen+2)/3)*4;// output length including padding
char[] out =newchar[oLen];
intip = iOff;
intiEnd = iOff + iLen;
intop =0;
while(ip
inti0 = in[ip++] &0xff;
inti1 = ip
inti2 = ip
into0 = i0 >>>2;
into1 = ((i0 &3) <<4) | (i1 >>>4);
into2 = ((i1 &0xf) <<2) | (i2 >>>6);
into3 = i2 &0x3F;
out[op++] = map1[o0];
out[op++] = map1[o1];
out[op] = op
out[op] = op
returnout; }
/**
* Decodes a string from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param s A Base64 String to be decoded.
* @return A String containing the decoded data.
* @throws IllegalArgumentException If the input is not valid Base64 encoded data.
*/
publicstaticString decodeString (String s) {
returnnewString(decode(s)); }
/**
* Decodes a byte array from Base64 format and ignores line separators, tabs and blanks.
* CR, LF, Tab and Space characters are ignored in the input data.
* This method is compatible with sun.misc.BASE64Decoder.decodeBuffer(String)
.
* @param s A Base64 String to be decoded.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException If the input is not valid Base64 encoded data.
*/
publicstaticbyte[] decodeLines (String s) {
char[] buf =newchar[s.length()+3];
intp =0;
for(intip =0; ip
charc = s.charAt(ip);
if(c !=' '&& c !='\r'&& c !='\n'&& c !='\t')
buf[p++] = c; }
while((p %4) !=0)
buf[p++] ='0';
returndecode(buf,0, p); }
/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param s A Base64 String to be decoded.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException If the input is not valid Base64 encoded data.
*/
publicstaticbyte[] decode (String s) {
returndecode(s.toCharArray()); }
/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param in A character array containing the Base64 encoded data.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException If the input is not valid Base64 encoded data.
*/
publicstaticbyte[] decode (char[] in) {
returndecode(in,0, in.length); }
/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded input data.
* @param in A character array containing the Base64 encoded data.
* @param iOff Offset of the first character in in
to be processed.
* @param iLen Number of characters to process in in
, starting at iOff
.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException If the input is not valid Base64 encoded data.
*/
publicstaticbyte[] decode (char[] in,intiOff,intiLen) {
if(iLen%4!=0)thrownewIllegalArgumentException ('Length of Base64 encoded input string is not a multiple of 4.');
while(iLen >0&& in[iOff+iLen-1] =='=') iLen--;
intoLen = (iLen*3) /4;
byte[] out =newbyte[oLen];
intip = iOff;
intiEnd = iOff + iLen;
intop =0;
while(ip
inti0 = in[ip++];
inti1 = in[ip++];
inti2 = ip
inti3 = ip
if(i0 >127|| i1 >127|| i2 >127|| i3 >127)
thrownewIllegalArgumentException ('Illegal character in Base64 encoded data.');
intb0 = map2[i0];
intb1 = map2[i1];
intb2 = map2[i2];
intb3 = map2[i3];
if(b0 <0|| b1 <0|| b2 <0|| b3 <0)
thrownewIllegalArgumentException ('Illegal character in Base64 encoded data.');
into0 = ( b0 <<2) | (b1>>>4);
into1 = ((b1 &0xf)<<4) | (b2>>>2);
into2 = ((b2 &3)<<6) | b3;
out[op++] = (byte)o0;
if(op
if(op
returnout; }
//Dummy constructor.
privateBase64Coder() {}
}// end class Base64Coder