2013-04-18 31 views

回答

1

如何理解的base64结束串

的你到底有没有说过的base64 API你使用,但一般他们会要求您提供字符串的长度为4个字符的倍数。 base64字符串中的每4个字符对应3个字节。

如果整个二进制数据不是3字节的倍数,最后4个字符包含填充=字符以指示所需的长度。有关更多详细信息,请参阅Wikipedia Base64 article中的填充部分。

+0

我正在使用commons-codec-1.4.jar.I想要传递一个输入字符串并使用Base64 API进行解码。但是我无法为少数字符串做一个截断版本。所以我需要知道如何强制结束字符串并生成部分图像,所以我需要知道将终止截断字符串并生成部分图像的通用模式。 – user2295281

+0

@ user2295281:那么你可以在4个字符的边界处截断,或者添加适当的'='字符以使其达到4个字符的边界。请注意,如果这确实是图像数据,那么您可能不会以这种方式获得有效的图像。 –

+0

您好我认为问题不是与Base64,但获得字节数组时,我使用BufferedImage传递BufferedImage中的字节数组bImageFromConvert = ImageIO.read(in);它示出了错误 javax.imageio.IIOException:错误读取PNG图像数据 \t在com.sun.imageio.plugins.png.PNGImageReader.readImage(未知来源) \t在com.sun.imageio.plugins.png。 PNGImageReader.read(Unknown Source) \t at javax.imageio.ImageIO.read(Unknown Source) \t at javax.imageio.ImageIO.read(Unknown Source) – user2295281

0

在Base64中,每个字符代表64个值中的一个:6位值。但字节是8位值,所以base-64编码数据必须是的倍数 6和8.

那么,一个6位字符显然不会填充一个字节,但两个6位位字符(12位)不完全填充两个字节。三个6位字符(18位)填充多于两个字节,但不是三个。但是,四个6位字符(24位)恰好填充了三个8位字节。

所以base64字符串的长度必须是4个字符的倍数,以便能够用数据填充整个8位字节的倍数。这意味着您可以将base64编码的数据分割为四个字符的任意倍数,并且可以工作。但是,如果您将数据分成其他任何位置,则可能无法正常工作。

这也适用于数据的结尾。例如,如果我只有六个8位字节进行编码(40位),但是base64字符串必须是两个4位长度为6位的字符(48位),那么我就是8位数据。对于那些剩余的(部分)6位字符=字符来指示不存在特定数据。