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

📄 base64util.java

📁 这是一个轻便的j2ee的web应用框架,是一个在多个项目中运用的实际框架,采用struts,hebinate,xml等技术,有丰富的tag,role,navigation,session,dictio
💻 JAVA
字号:
/*
 * Created on 2004-5-11
 *
 */
package com.esimple.service.crypto.util;

/**
 * @author steven
 *
 */
public class BASE64Util {
	private static final int LOWER_CASE_A_VALUE = 26;
	private static final int ZERO_VALUE = 52;
	private static final int PLUS_VALUE = 62;
	private static final int SLASH_VALUE = 63;
	private static final int SIX_BIT_MASK = 63;
	private static final int EIGHT_BIT_MASK = 255;

	public static String encode(byte data[]) {
		int charCount = (data.length * 4) / 3 + 4;
		StringBuffer result = new StringBuffer((charCount * 77) / 76);
		int byteArrayLength = data.length;
		int byteArrayIndex = 0;
		int byteTriplet = 0;
		while (byteArrayIndex < byteArrayLength - 2) {
			byteTriplet = CharUtil.convertUnsignedByteToInt(data[byteArrayIndex++]);
			byteTriplet <<= 8;
			byteTriplet |= CharUtil.convertUnsignedByteToInt(data[byteArrayIndex++]);
			byteTriplet <<= 8;
			byteTriplet |= CharUtil.convertUnsignedByteToInt(data[byteArrayIndex++]);
			byte b4 = (byte) (0x3f & byteTriplet);
			byteTriplet >>= 6;
			byte b3 = (byte) (0x3f & byteTriplet);
			byteTriplet >>= 6;
			byte b2 = (byte) (0x3f & byteTriplet);
			byteTriplet >>= 6;
			byte b1 = (byte) (0x3f & byteTriplet);
			result.append(CharUtil.mapByteToChar(b1));
			result.append(CharUtil.mapByteToChar(b2));
			result.append(CharUtil.mapByteToChar(b3));
			result.append(CharUtil.mapByteToChar(b4));
			if (byteArrayIndex % 57 == 0)
				result.append("\n");
		}
		if (byteArrayIndex == byteArrayLength - 1) {
			byteTriplet = CharUtil.convertUnsignedByteToInt(data[byteArrayIndex++]);
			byteTriplet <<= 4;
			byte b2 = (byte) (0x3f & byteTriplet);
			byteTriplet >>= 6;
			byte b1 = (byte) (0x3f & byteTriplet);
			result.append(CharUtil.mapByteToChar(b1));
			result.append(CharUtil.mapByteToChar(b2));
			result.append("==");
		}
		if (byteArrayIndex == byteArrayLength - 2) {
			byteTriplet = CharUtil.convertUnsignedByteToInt(data[byteArrayIndex++]);
			byteTriplet <<= 8;
			byteTriplet |= CharUtil.convertUnsignedByteToInt(data[byteArrayIndex++]);
			byteTriplet <<= 2;
			byte b3 = (byte) (0x3f & byteTriplet);
			byteTriplet >>= 6;
			byte b2 = (byte) (0x3f & byteTriplet);
			byteTriplet >>= 6;
			byte b1 = (byte) (0x3f & byteTriplet);
			result.append(CharUtil.mapByteToChar(b1));
			result.append(CharUtil.mapByteToChar(b2));
			result.append(CharUtil.mapByteToChar(b3));
			result.append("=");
		}
		return result.toString();
	}




	public static byte[] decodeBuffer(String data) {
		StringWrapper wrapper = new StringWrapper(data);
		int byteArrayLength = (wrapper.getUsefulLength() * 3) / 4;
		byte result[] = new byte[byteArrayLength];
		int byteTriplet = 0;
		int byteIndex;
		for (byteIndex = 0; byteIndex + 2 < byteArrayLength; byteIndex += 3) {
			byteTriplet = CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet <<= 6;
			byteTriplet |= CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet <<= 6;
			byteTriplet |= CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet <<= 6;
			byteTriplet |= CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			result[byteIndex + 2] = (byte) (byteTriplet & 0xff);
			byteTriplet >>= 8;
			result[byteIndex + 1] = (byte) (byteTriplet & 0xff);
			byteTriplet >>= 8;
			result[byteIndex] = (byte) (byteTriplet & 0xff);
		}

		if (byteIndex == byteArrayLength - 1) {
			byteTriplet = CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet <<= 6;
			byteTriplet |= CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet >>= 4;
			result[byteIndex] = (byte) (byteTriplet & 0xff);
		}
		if (byteIndex == byteArrayLength - 2) {
			byteTriplet = CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet <<= 6;
			byteTriplet |= CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet <<= 6;
			byteTriplet |= CharUtil.mapCharToInt(wrapper.getNextUsefulChar());
			byteTriplet >>= 2;
			result[byteIndex + 1] = (byte) (byteTriplet & 0xff);
			byteTriplet >>= 8;
			result[byteIndex] = (byte) (byteTriplet & 0xff);
		}
		return result;
	}



	private static class StringWrapper {

		private String mString;
		private int mIndex;
		private int mUsefulLength;

		private boolean isUsefulChar(char c) {
			return c >= 'A'
				&& c <= 'Z'
				|| c >= 'a'
				&& c <= 'z'
				|| c >= '0'
				&& c <= '9'
				|| c == '+'
				|| c == '/';
		}

		public int getUsefulLength() {
			return mUsefulLength;
		}

		public char getNextUsefulChar() {
			char result;
			for (result = '_';
				!isUsefulChar(result);
				result = mString.charAt(mIndex++));
			return result;
		}

		public StringWrapper(String s) {
			mIndex = 0;
			mString = s;
			mUsefulLength = 0;
			int length = mString.length();
			for (int i = 0; i < length; i++)
				if (isUsefulChar(mString.charAt(i)))
					mUsefulLength++;

		}
	}
}

⌨️ 快捷键说明

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