下面貼出這個工具類的源代碼,供朋友們參考,本人新手寫得不好,請用力拍磚:
/************************base64util.java*****************************/
<a href="http://my.oschina.net/itblog/blog/204413#">?</a>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<code>package</code> <code>util;</code>
<code>import</code> <code>java.util.hashmap;</code>
<code>import</code> <code>java.util.map;</code>
<code>/**</code>
<code> </code><code>* this class is a tool class to convert base64 string and </code>
<code> </code><code>* normal string to each other. <br><br></code>
<code> </code><code>* more information about base64, please refer to: </code>
<code> </code><code>* http://zh.wikipedia.org/zh-cn/base64</code>
<code> </code><code>* @author user</code>
<code> </code><code>*/</code>
<code>public</code> <code>class</code> <code>base64util {</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>map<integer, character> base64charmap = </code><code>new</code> <code>hashmap<>();</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>string base64charstring = </code>
<code> </code><code>"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/"</code><code>;</code>
<code> </code><code>static</code> <code>{</code>
<code> </code><code>// initialize base64 map</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i<base64charstring.length();i++){</code>
<code> </code><code>char</code> <code>c = base64charstring.charat(i);</code>
<code> base64charmap.put(</code><code>new</code> <code>integer(i), </code><code>new</code> <code>character(c));</code>
<code> }</code>
<code> }</code>
<code> </code><code>/**</code>
<code> * this method is used to encode a normal string to base64 string</code>
<code> * @param origin</code>
<code> * the string to be encoded</code>
<code> * @return</code>
<code> * the string after encoded.</code>
<code> */</code>
<code> </code><code>public</code> <code>static</code> <code>string encode (string origin) {</code>
<code> </code><code>if</code> <code>(origin == </code><code>null</code><code>) {</code>
<code> </code><code>return</code> <code>null</code><code>;</code>
<code> </code><code>if</code> <code>(origin.length() == </code><code>0</code><code>) {</code>
<code> </code><code>return</code> <code>""</code><code>;</code>
<code> </code><code>int</code> <code>length = origin.length();</code>
<code> string binarystring = </code><code>""</code><code>;</code>
<code> </code><code>// to binary string</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i<length;i++) {</code>
<code> </code><code>int</code> <code>ascii = origin.charat(i);</code>
<code> string binarycharstring = integer.tobinarystring(ascii);</code>
<code> </code><code>while</code> <code>(binarycharstring.length() < </code><code>8</code><code>) {</code>
<code> binarycharstring = </code><code>"0"</code> <code>+ binarycharstring;</code>
<code> }</code>
<code> binarystring += binarycharstring;</code>
<code> </code><code>// to base64 index</code>
<code> </code><code>int</code> <code>beginindex = </code><code>0</code><code>;</code>
<code> </code><code>int</code> <code>endindex = beginindex + </code><code>6</code><code>;</code>
<code> string base64binarystring = </code><code>""</code><code>;</code>
<code> string charstring = </code><code>""</code><code>;</code>
<code> </code><code>while</code> <code>((base64binarystring = </code>
<code> binarystring.substring(beginindex, endindex)).length() > </code><code>0</code><code>) {</code>
<code> </code><code>//if length is less than 6, add "0".</code>
<code> </code><code>while</code> <code>(base64binarystring.length() < </code><code>6</code><code>) {</code>
<code> base64binarystring += </code><code>"0"</code><code>;</code>
<code> </code><code>int</code> <code>index = integer.parseint(base64binarystring, </code><code>2</code><code>);</code>
<code> </code><code>char</code> <code>base64char = base64charmap.get(index);</code>
<code> charstring = charstring + base64char;</code>
<code> beginindex += </code><code>6</code><code>;</code>
<code> endindex += </code><code>6</code><code>;</code>
<code> </code><code>if</code> <code>(endindex >= binarystring.length()) {</code>
<code> endindex = binarystring.length();</code>
<code> </code><code>if</code> <code>(endindex < beginindex) {</code>
<code> </code><code>break</code><code>;</code>
<code> </code><code>if</code> <code>(length % </code><code>3</code> <code>== </code><code>2</code><code>) {</code>
<code> charstring += </code><code>"="</code><code>;</code>
<code> </code><code>if</code> <code>(length % </code><code>3</code> <code>== </code><code>1</code><code>) {</code>
<code> charstring += </code><code>"=="</code><code>;</code>
<code> </code><code>return</code> <code>charstring;</code>
<code> * this method is used to decode from base64 string to a normal string.</code>
<code> * @param encodedstring</code>
<code> * the string to be decoded.</code>
<code> * the string after decoded.</code>
<code> </code><code>public</code> <code>static</code> <code>string decode(string encodedstring) {</code>
<code> </code><code>if</code> <code>(encodedstring == </code><code>null</code><code>) {</code>
<code> </code><code>if</code> <code>(encodedstring.length() == </code><code>0</code><code>) {</code>
<code> </code><code>//get origin base64 string</code>
<code> string origin = encodedstring.substring(</code><code>0</code><code>,encodedstring.indexof(</code><code>"="</code><code>));</code>
<code> string equals = encodedstring.substring(encodedstring.indexof(</code><code>"="</code><code>));</code>
<code> </code><code>//convert base64 string to binary string</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i=</code><code>0</code><code>;i<origin.length();i++) {</code>
<code> </code><code>char</code> <code>c = origin.charat(i);</code>
<code> </code><code>int</code> <code>ascii = base64charstring.indexof(c);</code>
<code> </code><code>while</code> <code>(binarycharstring.length() < </code><code>6</code><code>) {</code>
<code> </code><code>// the encoded string has 1 "=", means that the binary string has append 2 "0"</code>
<code> </code><code>if</code> <code>(equals.length() == </code><code>1</code><code>) {</code>
<code> binarystring = binarystring.substring(</code><code>0</code><code>,binarystring.length()-</code><code>2</code><code>);</code>
<code> </code><code>// the encoded string has 2 "=", means that the binary string has append 4 "0"</code>
<code> </code><code>if</code> <code>(equals.length() == </code><code>2</code><code>) {</code>
<code> binarystring = binarystring.substring(</code><code>0</code><code>,binarystring.length()-</code><code>4</code><code>);</code>
<code> </code><code>// convert to string</code>
<code> string resultstring = </code><code>""</code><code>;</code>
<code> </code><code>int</code> <code>endindex = beginindex + </code><code>8</code><code>;</code>
<code> </code><code>while</code> <code>((charstring = </code>
<code> binarystring.substring(beginindex, endindex)).length() == </code><code>8</code><code>) {</code>
<code> </code><code>int</code> <code>ascii = integer.parseint(charstring, </code><code>2</code><code>);</code>
<code> resultstring += (</code><code>char</code><code>)ascii;</code>
<code> beginindex += </code><code>8</code><code>;</code>
<code> endindex += </code><code>8</code><code>;</code>
<code> </code><code>if</code> <code>(endindex > binarystring.length()) {</code>
<code> </code><code>return</code> <code>resultstring;</code>
<code> </code><code>// test methods here.</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) {</code>
<code> string originstring = </code>
<code> </code><code>"man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure."</code><code>;</code>
<code> string base64string = </code>
<code> </code><code>"twfuiglzigrpc3rpbmd1axnozwqsig5vdcbvbmx5igj5ighpcybyzwfzb24sigj1dcbiesb0aglz"</code> <code>+</code>
<code> </code><code>"ihnpbmd1bgfyihbhc3npb24gznjvbsbvdghlcibhbmltywxzlcb3agljacbpcybhigx1c3qgb2yg"</code> <code>+</code>
<code> </code><code>"dghlig1pbmqsihroyxqgynkgysbwzxjzzxzlcmfuy2ugb2ygzgvsawdodcbpbib0agugy29udglu"</code> <code>+</code>
<code> </code><code>"dwvkigfuzcbpbmrlzmf0awdhymxligdlbmvyyxrpb24gb2yga25vd2xlzgdllcblegnlzwrzihro"</code> <code>+</code>
<code> </code><code>"zsbzag9ydcb2zwhlbwvuy2ugb2ygyw55ignhcm5hbcbwbgvhc3vyzs4="</code><code>; </code>
<code> system.out.println(</code><code>"===============encode================="</code><code>);</code>
<code> string result = encode(originstring);</code>
<code> system.out.println(result);</code>
<code> system.out.println(result.equals(base64string));</code>
<code> system.out.println(</code><code>"===============decode================="</code><code>);</code>
<code> string decodedstring = decode(base64string);</code>
<code> system.out.println(decodedstring);</code>
<code> system.out.println(originstring.equals(decodedstring));</code>
<code> system.out.println(decode(encode(</code><code>"abcdefg"</code><code>)));</code>
<code>}</code>