⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcubase64.java

📁 为公司做的质量考核接口源码,用spring,hibernate,XML实现,对XML接口编程很有帮助
💻 JAVA
字号:
/**
 * 
 */
package com.jr81.source.xml.source;

import java.io.File;
/**
 * @author Administrator
 *
 */
public final class TcuBase64 {

	//用于编码的字符 
//	 
	static private char[] alphabet ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); 
//	 
//	 用于解码的字节(0-255) 
//	 
	static private byte[] codes = new byte[256]; 
	static { 
	  for (int i=0; i<256; i++) codes[i] = -1; 
	  for (int i = 'A'; i <= 'Z'; i++) codes[i] = (byte)( i - 'A'); 
	  for (int i = 'a'; i <= 'z'; i++) codes[i] = (byte)(26 + i - 'a'); 
	  for (int i = '0'; i <= '9'; i++) codes[i] = (byte)(52 + i - '0'); 
	  codes['+'] = 62; 
	  codes['/'] = 63; 
	} 
	
//	编码文件对象所指的文件 
	static public char[] encode(File file){ 
	  if (!file.exists()) { 
	  System.err.println("错误:文件不存在!"); 
	  return null; 
	  } 
	return encode(TcuUnility.readBytes(file)); 
	} 
//	编码文件名所指的文件 
	static public char[] encode(String filename){ 
	File file = new File(filename); 
	  if (!file.exists()) { 
	  System.err.println("错误:文件“"+filename+"”不存在!"); 
	  return null; 
	  } 
	return encode(TcuUnility.readBytes(file)); 
	} 
//	编码传入的字节数组,输出编码后的字符数组 
	static public char[] encode(byte[] data) 
	{ 
	  char[] out = new char[((data.length + 2) / 3) * 4]; 
//	 
	  // 对字节进行Base64编码,每三个字节转化为4个字符. 
	  // 输出总是能被4整除的偶数个字符 
	  // 
	  for (int i=0, index=0; i< data.length; i+=3, index+=4) { 
	  boolean quad = false; 
	  boolean trip = false; 
	  int val = (0xFF & (int) data[i]); 
	  val <<= 8; 
	  if ((i+1) < data.length) { 
	  val |= (0xFF & (int) data[i+1]); 
	  trip = true; 
	  } 
	  val <<= 8; 
	  if ((i+2) < data.length) { 
	  val |= (0xFF & (int) data[i+2]); 
	  quad = true; 
	  } 
	  out[index+3] = alphabet[(quad? (val & 0x3F): 64)]; 
	  val >>= 6; 
	  out[index+2] = alphabet[(trip? (val & 0x3F): 64)]; 
	  val >>= 6; 
	  out[index+1] = alphabet[val & 0x3F]; 
	  val >>= 6; 
	  out[index+0] = alphabet[val & 0x3F]; 
	  } 
	    return out; 
	} 
	static public byte[] decode(char[] data) 
	{ 
	  // 程序中有判断如果有回车、空格等非法字符,则要去掉这些字符 
	  // 这样就不会计算错误输出的内容 
	  int tempLen = data.length; 
	  for( int ix=0; ix< data.length; ix++ ) 
	  { 
	  if( (data[ix] > 255) || codes[ data[ix] ] < 0 ) 
	  --tempLen; // 去除无效的字符 
	  } 
	  // 计算byte的长度 
	  // -- 每四个有效字符输出三个字节的内容 
	  // -- 如果有额外的3个字符,则还要加上2个字节, 
	  // 或者如果有额外的2个字符,则要加上1个字节 
	  int len = (tempLen / 4) * 3; 
	  if ((tempLen % 4) == 3) len += 2; 
	  if ((tempLen % 4) == 2) len += 1; 
	  byte[] out = new byte[len]; 
	  int shift = 0; 
	  int accum = 0; 
	  int index = 0; 
	  // 一个一个字符地解码(注意用的不是tempLen的值进行循环) 
	  for (int ix=0; ix< data.length; ix++) 
	  { 
	  int value = (data[ix]>255)? -1: codes[ data[ix] ]; 
	  if ( value >= 0 ) // 忽略无效字符 
	  { 
	  accum <<= 6; 
	  shift += 6; 
	  accum |= value; 
	  if ( shift >= 8 ) 
	  { 
	  shift -= 8; 
	  out[index++] = 
	  (byte) ((accum >> shift) & 0xff); 
	  } 
	  } 
	  } 
	  //如果数组长度和实际长度不符合,那么抛出错误 
	  if( index != out.length) 
	  { 
	  throw new Error("数据长度不一致(实际写入了 " + index + "字节,但是系统指示有" + out.length + "字节)"); 
	  } 
	  return out; 
	} 
//	 




	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String key = new String("颜斌^_^^"); 
		  byte[] a = key.getBytes(); 
		  char[] b = TcuBase64.encode(a) ; 
		  System.out.println(new String(b));
		   //for(int i=0;i< b.length;i++){ 
		   //  System.out.println(b[i]); 
		   //} 
		  byte[] c = TcuBase64.decode(b);
		  System.out.println(new String(c));

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -