Base64是一種能將任意Binary資料用64種字元組合成字串的方法,而這個Binary資料和字串資料彼此之間是可以互相轉換的,十分方便。Bae64通常會用在小量資料上,因此可以完全將資料放在主記憶體中處理。但如果遇到大量資料時該怎麼辦呢?



Base64的編碼方式,會將3個位元組的資料編碼成4個位元組,也就是說,如果要一次編碼一個#{{X}}#大小的資料,那麼就會需要使用到#{{ X + { {4 \over 3}X } = {7 \over 3}X }}#的記憶體空間。假設#{{X}}#為30MB,就需要70MB的記憶體空間來進行編碼!

因此,用Base64編碼大量資料時,最好還是將資料切割讀取,分段進行編碼。當然,Base64解碼也會遇到記憶體空間的問題,而需要做分段解碼。

Base64 Stream

「Base64 Stream」是筆者開發的套件,提供了「ToBase64Reader」、「ToBase64Writer」、「FromBase64Reader」、「FromBase64Writer」這四樣工具,以「read」和「write」片段資料的方式來進行Base64的編碼或解碼。

Crates.io

https://crates.io/crates/base64-stream

Cargo.toml

base64-stream = "*"

使用方法

ToBase64Reader

使用「use」關鍵字來將「base64-stream」這個crate底下的「ToBase64Reader」結構體給引用到當前的程式範圍下。「ToBase64Reader」結構體實作了「read」特性,可以從原始的資料來源中,讀取出Base64編碼後的資料。

ToBase64Writer

使用「use」關鍵字來將「base64-stream」這個crate底下的「ToBase64Writer」結構體給引用到當前的程式範圍下。「ToBase64Writer」結構體實作了「write」特性,可以輸入原始的資料,並輸出Base64編碼後的資料。

FromBase64Reader

使用「use」關鍵字來將「base64-stream」這個crate底下的「FromBase64Reader」結構體給引用到當前的程式範圍下。「FromBase64Reader」結構體實作了「read」特性,可以從經過Base64編碼的資料來源中,讀取出其解碼後的原始資料。

FromBase64Writer

使用「use」關鍵字來將「base64-stream」這個crate底下的「FromBase64Writer」結構體給引用到當前的程式範圍下。「FromBase64Writer」結構體實作了「write」特性,可以輸入經過Base64編碼的資料,並輸出其解碼後的原始資料。