【移动应用开发技术】在Java中怎么将 Base64编码与String字符串进行转换_第1页
【移动应用开发技术】在Java中怎么将 Base64编码与String字符串进行转换_第2页
【移动应用开发技术】在Java中怎么将 Base64编码与String字符串进行转换_第3页
【移动应用开发技术】在Java中怎么将 Base64编码与String字符串进行转换_第4页
【移动应用开发技术】在Java中怎么将 Base64编码与String字符串进行转换_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】在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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论