java实现base64编码

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.codec.binary.Base64;

public class MyBase64 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		char c  = '0';
//		int i  = (int)c;
//		System.out.println(i);
//		System.out.println(Integer.toBinaryString(i));
		
		String s = "stringad";
		System.out.println(encode(s));
		System.out.println(encode(s.getBytes()));
		System.out.println(encode2(s.getBytes()));
		System.out.println(encode3(s.getBytes()));

		//System.out.println(convertBinaryString2Int("10"));
	}
	
	public static String encode(String str){
		char[] base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray(); 
		char[] cs = str.toCharArray();
		StringBuilder sb = new StringBuilder();
		for(char c: cs){
			String bin = Integer.toBinaryString((int)c);
			System.out.println("bin: "+bin);
			while(bin.length()<8){
				bin = "0"+bin;
			}
			sb.append(bin);
		}
		System.out.println("sb: "+sb);
		List<String> list = new ArrayList<String>();
		String temp = sb.toString();
		while(temp.length()>6){
			String s  = temp.substring(0,6);
			temp = temp.substring(6,temp.length());
			list.add(s);
		}
		while(temp.length()<6){
			temp+="0";
		}
		list.add(temp);
		String result = "";
		for(String s:list){
			//System.out.println(s);
			int num = convertBinaryString2Int(s);
			System.out.print(num+" ");
			result += base[num]+"";
					
		}
		System.out.println();
		if(result.length()%3==1){
			result+="==";
		}
		if(result.length()%3==2){
			result+="=";
		}
		return result;
	}

	public static int convertBinaryString2Int(String str){
		int sum = 0;
		for(int i= str.length()-1;i>=0;i--){
			Integer num = Integer.parseInt(str.charAt(i)+"");
			sum += num * Math.pow(2, str.length()-1-i); 
		}
		return sum;
	}
	
	/**  
	    * 编码  
	    * @param bstr  
	    * @return String  
	    */    
	   public static String encode(byte[] bstr){    
	   return new sun.misc.BASE64Encoder().encode(bstr);    
	   }  
	   
	   /** 
	     * 二进制数据编码为BASE64字符串 
	     * 
	     * @param bytes 
	     * @return 
	     * @throws Exception 
	     */  
	    public static String encode2(final byte[] bytes) {  
	        return new String(Base64.encodeBase64(bytes));  
	    }  
	    
	    public static String encode3(final byte[] bytes) {  
	        return new String(java.util.Base64.getEncoder().encode(bytes));  
	    }  
}

猜你喜欢

转载自edgar108.iteye.com/blog/2280094