版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】在Java中怎么将Base64编码与String字符串进行转换
这篇文章给大家介绍在Java中怎么将Base64编码与String字符串进行转换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体方法如下:package
com.duanlian.daimengmusic.utils;
public
final
class
Base64Util
{
private
static
final
int
BASELENGTH
=
128;
private
static
final
int
LOOKUPLENGTH
=
64;
private
static
final
int
TWENTYFOURBITGROUP
=
24;
private
static
final
int
EIGHTBIT
=
8;
private
static
final
int
SIXTEENBIT
=
16;
private
static
final
int
FOURBYTE
=
4;
private
static
final
int
SIGN
=
-128;
private
static
char
PAD
=
'=';
private
static
byte[]
base64Alphabet
=
new
byte[BASELENGTH];
private
static
char[]
lookUpBase64Alphabet
=
new
char[LOOKUPLENGTH];
static
{
for
(int
i
=
0;
i
<
BASELENGTH;
++i)
{
base64Alphabet[i]
=
-1;
}
for
(int
i
=
'Z';
i
>=
'A';
i--)
{
base64Alphabet[i]
=
(byte)
(i
-
'A');
}
for
(int
i
=
'z';
i
>=
'a';
i--)
{
base64Alphabet[i]
=
(byte)
(i
-
'a'
+
26);
}
for
(int
i
=
'9';
i
>=
'0';
i--)
{
base64Alphabet[i]
=
(byte)
(i
-
'0'
+
52);
}
base64Alphabet['+']
=
62;
base64Alphabet['/']
=
63;
for
(int
i
=
0;
i
<=
25;
i++)
{
lookUpBase64Alphabet[i]
=
(char)
('A'
+
i);
}
for
(int
i
=
26,
j
=
0;
i
<=
51;
i++,
j++)
{
lookUpBase64Alphabet[i]
=
(char)
('a'
+
j);
}
for
(int
i
=
52,
j
=
0;
i
<=
61;
i++,
j++)
{
lookUpBase64Alphabet[i]
=
(char)
('0'
+
j);
}
lookUpBase64Alphabet[62]
=
(char)
'+';
lookUpBase64Alphabet[63]
=
(char)
'/';
}
private
static
boolean
isWhiteSpace(char
octect)
{
return
(octect
==
0x20
||
octect
==
0xd
||
octect
==
0xa
||
octect
==
0x9);
}
private
static
boolean
isPad(char
octect)
{
return
(octect
==
PAD);
}
private
static
boolean
isData(char
octect)
{
return
(octect
<
BASELENGTH
&&
base64Alphabet[octect]
!=
-1);
}
/**
把64位byte数组转换成String
*/
public
static
String
encode(byte[]
binaryData)
{
if
(binaryData
==
null)
{
return
null;
}
int
lengthDataBits
=
binaryData.length
*
EIGHTBIT;
if
(lengthDataBits
==
0)
{
return
"";
}
int
fewerThan24bits
=
lengthDataBits
%
TWENTYFOURBITGROUP;
int
numberTriplets
=
lengthDataBits
/
TWENTYFOURBITGROUP;
int
numberQuartet
=
fewerThan24bits
!=
0
?
numberTriplets
+
1
:
numberTriplets;
char
encodedData[]
=
null;
encodedData
=
new
char[numberQuartet
*
4];
byte
k
=
0,
l
=
0,
b1
=
0,
b2
=
0,
b3
=
0;
int
encodedIndex
=
0;
int
dataIndex
=
0;
for
(int
i
=
0;
i
<
numberTriplets;
i++)
{
b1
=
binaryData[dataIndex++];
b2
=
binaryData[dataIndex++];
b3
=
binaryData[dataIndex++];
l
=
(byte)
(b2
&
0x0f);
k
=
(byte)
(b1
&
0x03);
byte
val1
=
((b1
&
SIGN)
==
0)
?
(byte)
(b1
>>
2)
:
(byte)
((b1)
>>
2
^
0xc0);
byte
val2
=
((b2
&
SIGN)
==
0)
?
(byte)
(b2
>>
4)
:
(byte)
((b2)
>>
4
^
0xf0);
byte
val3
=
((b3
&
SIGN)
==
0)
?
(byte)
(b3
>>
6)
:
(byte)
((b3)
>>
6
^
0xfc);
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[val1];
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[val2
|
(k
<<
4)];
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[(l
<<
2)
|
val3];
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[b3
&
0x3f];
}
//
form
integral
number
of
6-bit
groups
if
(fewerThan24bits
==
EIGHTBIT)
{
b1
=
binaryData[dataIndex];
k
=
(byte)
(b1
&
0x03);
byte
val1
=
((b1
&
SIGN)
==
0)
?
(byte)
(b1
>>
2)
:
(byte)
((b1)
>>
2
^
0xc0);
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[val1];
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[k
<<
4];
encodedData[encodedIndex++]
=
PAD;
encodedData[encodedIndex++]
=
PAD;
}
else
if
(fewerThan24bits
==
SIXTEENBIT)
{
b1
=
binaryData[dataIndex];
b2
=
binaryData[dataIndex
+
1];
l
=
(byte)
(b2
&
0x0f);
k
=
(byte)
(b1
&
0x03);
byte
val1
=
((b1
&
SIGN)
==
0)
?
(byte)
(b1
>>
2)
:
(byte)
((b1)
>>
2
^
0xc0);
byte
val2
=
((b2
&
SIGN)
==
0)
?
(byte)
(b2
>>
4)
:
(byte)
((b2)
>>
4
^
0xf0);
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[val1];
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[val2
|
(k
<<
4)];
encodedData[encodedIndex++]
=
lookUpBase64Alphabet[l
<<
2];
encodedData[encodedIndex++]
=
PAD;
}
return
new
String(encodedData);
}
/**
*
把Base64位编码转换成byte数组
*/
public
static
byte[]
decode(String
encoded)
{
if
(encoded
==
null)
{
return
null;
}
char[]
base64Data
=
encoded.toCharArray();
//
remove
white
spaces
int
len
=
removeWhiteSpace(base64Data);
if
(len
%
FOURBYTE
!=
0)
{
return
null;//
should
be
divisible
by
four
}
int
numberQuadruple
=
(len
/
FOURBYTE);
if
(numberQuadruple
==
0)
{
return
new
byte[0];
}
byte
decodedData[]
=
null;
byte
b1
=
0,
b2
=
0,
b3
=
0,
b4
=
0;
char
d1
=
0,
d2
=
0,
d3
=
0,
d4
=
0;
int
i
=
0;
int
encodedIndex
=
0;
int
dataIndex
=
0;
decodedData
=
new
byte[(numberQuadruple)
*
3];
for
(;
i
<
numberQuadruple
-
1;
i++)
{
if
(!isData((d1
=
base64Data[dataIndex++]))
||
!isData((d2
=
base64Data[dataIndex++]))
||
!isData((d3
=
base64Data[dataIndex++]))
||
!isData((d4
=
base64Data[dataIndex++])))
{
return
null;
}//
if
found
"no
data"
just
return
null
b1
=
base64Alphabet[d1];
b2
=
base64Alphabet[d2];
b3
=
base64Alphabet[d3];
b4
=
base64Alphabet[d4];
decodedData[encodedIndex++]
=
(byte)
(b1
<<
2
|
b2
>>
4);
decodedData[encodedIndex++]
=
(byte)
(((b2
&
0xf)
<<
4)
|
((b3
>>
2)
&
0xf));
decodedData[encodedIndex++]
=
(byte)
(b3
<<
6
|
b4);
}
if
(!isData((d1
=
base64Data[dataIndex++]))
||
!isData((d2
=
base64Data[dataIndex++])))
{
return
null;//
if
found
"no
data"
just
return
null
}
b1
=
base64Alphabet[d1];
b2
=
base64Alphabet[d2];
d3
=
base64Data[dataIndex++];
d4
=
base64Data[dataIndex++];
if
(!isData((d3))
||
!isData((d4)))
{//
Check
if
they
are
PAD
characters
if
(isPad(d3)
&&
isPad(d4))
{
if
((b2
&
0xf)
!=
0)//
last
4
bits
should
be
zero
{
return
null;
}
byte[]
tmp
=
new
byte[i
*
3
+
1];
System.arraycopy(decodedData,
0,
tmp,
0,
i
*
3);
tmp[encodedIndex]
=
(byte)
(b1
<<
2
|
b2
>>
4);
return
tmp;
}
else
if
(!isPad(d3)
&&
isPad(d4))
{
b3
=
base64Alphabet[d3];
if
((b3
&
0x3)
!=
0)//
last
2
bits
should
be
zero
{
return
null;
}
byte[]
tmp
=
new
byte[i
*
3
+
2];
System.arraycopy(decodedData,
0,
tmp,
0,
i
*
3);
tmp[encodedIndex++]
=
(byte)
(b1
<<
2
|
b2
>>
4);
tmp[encodedIndex]
=
(byte)
(((b2
&
0xf)
<<
4)
|
((b3
>>
2)
&
0xf));
return
tmp;
}
else
{
return
null;
}
}
else
{
//
No
PAD
e.g
3cQl
b3
=
base64Alphabet[d3];
b4
=
base64Alphabet[d4];
decodedData[encodedIndex++]
=
(byte)
(b1
<<
2
|
b2
>>
4);
decodedData[encodedIndex++]
=
(byte)
(((b2
&
0xf)
<<
4)
|
((b3
>>
2)
&
0xf));
decodedData[encodedIndex++]
=
(byte)
(b3
<<
6
|
b4);
}
return
decodedData;
}
/**
*
remove
WhiteSpace
from
MIME
containing
encoded
Base64Util
data.
*
*
@param
data
*
the
byte
array
of
base64
data
(with
WS)
*
@return
the
new
length
*/
private
static
int
removeWhiteSpace(char[]
data)
{
if
(data
==
null)
{
return
0;
}
//
count
characters
that's
not
whitespace
int
newSize
=
0;
int
len
=
data.length;
for
(int
i
=
0;
i
<
len;
i++)
{
if
(!isWhiteSpace(data[i]))
{
data[newSize++]
=
data[i];
}
}
return
newSize;
}
}然后是我经过2次封装的类,注释很清楚,拿过去直接用就行package
com.duanlian.daimengmusic.utils;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.util.Base64;
import
java.io.ByteArrayOutputStream;
import
java.io.IOException;
/**
*
转换编码
*/
public
class
Base64Object
{
/**
*
把base64的String码转换成正常显示的字符串
*/
public
static
String
base64ToString(String
base64)
{
byte[]
decode
=
Base64Util.decode(base64);
String
s
=
new
String(decode);
return
s;
}
/**
*
把String的转换成base64码
*/
public
static
String
stringToBase64(String
ss)
{
byte[]
bytes
=
ss.getBytes();
String
encode
=
Base64Util.encode(bytes);
return
encode;
}
/**
*
bitmap转为base64
*
@param
bitmap
*
@return
*/
public
static
String
bitmapToBase641(Bitmap
bitmap)
{
String
result
=
null;
ByteArrayOutput
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业司机劳务外包协议范例版B版
- 专利与商业秘密:2024版双边保密合作合同版B版
- 上海专业精装修工程合同(2024年版)版B版
- 专业物流委托运输协议模板(2024年新版)版B版
- 个人住宅装修设计合作合同(2024年版)版B版
- 市第五医院医学教育培训管理办法
- 2024年银行安防系统改造合同3篇
- 生日星的辉煌轨迹
- 理赔服务新高度
- 科学实验的探索之旅
- 上海上海市医疗急救中心招聘笔试历年典型考题及考点附答案解析
- 新概念英语第一册Lesson103-104笔记(语法点+配套练习+答案)
- 2024年河南农业职业学院单招职业适应性测试题库及参考答案
- (正式版)JBT 3300-2024 平衡重式叉车 整机试验方法
- 养老院健康档案模板
- (2024年)电工安全培训(新编)课件
- 单位车辆变更名称的委托书
- 粉尘外协单位清理协议书
- 2023年12月首都医科大学附属北京中医医院面向应届生招考聘用笔试近6年高频考题难、易错点荟萃答案带详解附后
- 机电设备故障诊断与维修(高职)全套教学课件
- 建设银行新员工培训方案
评论
0/150
提交评论