2013-04-18 67 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位字符=字符來指示不存在特定數據。