如何解決處理base64編碼文件大小不能超過71MB的問題?
base64只是一種二進(jìn)制轉(zhuǎn)換字符的編碼方式而已,并不存在什么位數(shù)限制。這多大的數(shù)據(jù)都能編碼,這是毫無疑問的。
所以你編碼71M文件時出錯,很明顯是你使用的轉(zhuǎn)換庫有問題。
這個報(bào)錯很明顯是這個庫編碼base64時,直接把輸出的base64編碼存到了一個字符串變量里去,導(dǎo)致字符串變量數(shù)據(jù)過大,從而益出報(bào)錯。
所以解決方案很簡單,不要直接去對71M的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
一 你可以在讀取圖片的時候,不要一次性把圖片全部加載到內(nèi)存里,而是寫一個循環(huán),按照固定的位數(shù)去讀區(qū)。絕大多數(shù)語言的read()方法都支持位讀取。
這樣一塊一塊的編碼就不會溢出了。
二 你也可以使用緩沖區(qū)而不是變量,先把圖片讀到緩沖區(qū)中,然后同上,按照位數(shù)分片轉(zhuǎn)換。
最后要注意,輸出結(jié)果的時候,千萬不能把結(jié)果直接累加在一個變量中,這樣一樣會溢出。
你可以
一 分片轉(zhuǎn)換,然后分片直接打印
二 分片的把結(jié)果寫入一個文件中
三 直接分片進(jìn)行網(wǎng)絡(luò)傳輸,客戶端在進(jìn)行組合。
四 用數(shù)組,堆,字典等等復(fù)雜數(shù)據(jù)結(jié)構(gòu)來儲存結(jié)果。