java写一个base64_自己写的一个base64转换用途Java程序

1 importjava.io.ByteArrayOutputStream;2 importjava.io.IOException;3 importjava.io.StringWriter;4 importjava.util.Arrays;5 importjava.util.HashMap;6 importjava.util.Map;7

8 public classMyBase64 {9 private static final char[] set = ".0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"

10 .toCharArray();11 /*

12 * 结尾表示填充0x0字符数目13 */

14 static final char blank = '-';15 /*

16 * 间隔三个字符分段17 */

18 static final int step = 3;19 /*

20 * 源数组结尾填021 */

22 static final byte fill = 0x0;23

24 private static MyBase64A myBase64 = null;25

26 public staticMyBase64A getInstance() {27 if (myBase64 == null) {28 synchronized (MyBase64A.class) {29 if (myBase64 == null) {30 myBase64 = newMyBase64A();31 }32 }33 }34 returnmyBase64;35 //return threadLocal.get();

36 }37

38 private static MapinitMap() {39 Map hashMap = new HashMap(40 set.length);41 for (int i = 0; i < set.length; i++) {42 hashMap.put(set[i], i);43 }44 returnhashMap;45 }46

47 private final Mapmap;48

49 privateMyBase64A() {50 map =initMap();51 }52

53 public byte[] reverseTrans(String string) throwsIOException {54 char[] chars =string.toCharArray();55

56 final int step = 4;57

58 int approximation = chars.length * 3 / 4;59 ByteArrayOutputStream byteArrayOutputStream = newByteArrayOutputStream(60 approximation);61

62 longswap;63 charc1, c2, c3, c4;64 byteb1, b2, b3;65

66 int begin = 0;67 int end =chars.length;68

69 int offset =begin;70 while (offset + 3

76 swap = (map.get(c1) & 0xff) << 18 | (map.get(c2) & 0xff) << 12

77 | (map.get(c3) & 0xff) << 6 | (map.get(c4) & 0xff);78

79 b1 = (byte) ((swap >> 16) & 0xff);80 b2 = (byte) ((swap >> 8) & 0xff);81 b3 = (byte) (swap & 0xff);82

83 byteArrayOutputStream.write(b1);84 byteArrayOutputStream.write(b2);85 byteArrayOutputStream.write(b3);86

87 offset +=step;88 }89 //logger.debug(end - offset);

90 byte[] bytes =Arrays.copyOf(byteArrayOutputStream.toByteArray(),91 byteArrayOutputStream.size() - (end -offset));92 returnbytes;93 }94

95 /**

96 *97 *@paramsource98 * 总之是一个字节队列。99 *@returnurl相容的 自制 base64编码100 */

101 public String trans(byte[] source) {102 int begin = 0, end =source.length;103 /*

104 * (source.length + 2) / 3 处以三,余数上限取整。 + 2 , 可能追加至多两个填充占位符。105 */

106 int approximation = (source.length + 2) / 3 * 4 + 2;107 StringWriter stringWriter = newStringWriter(approximation);108

109 intoffset;110 longswap;111 bytea, b, c;112 intnum1, num2, num3, num4;113 int app = 0;114

115 offset =begin;116 while (offset

131 swap = ((a & 0xff) << 16) | ((b & 0xff) << 8) | c & 0xff;132

133 //logger.debug(String.format("%x", swap));

134

135 num1 = (int) ((swap >> 18) & 63);136 num2 = (int) ((swap >> 12) & 63);137 num3 = (int) ((swap >> 6) & 63);138 num4 = (int) (swap & 63);139

140 stringWriter.append(set[num1]);141 stringWriter.append(set[num2]);142 stringWriter.append(set[num3]);143 stringWriter.append(set[num4]);144

145 offset +=step;146 }147 if (app == 1) {148 stringWriter.append(blank);149 }150 if (app == 2) {151 stringWriter.append(blank);152 stringWriter.append(blank);153 }154 returnstringWriter.toString();155 }156 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值