[英]Get length of base64 decoded data
我需要計算base64解碼數據的長度。
我有Base-64數據,我正在將未編碼的數據作為HTTP響應的主體發送(典型值:我的意思是請求,但想法相同)。
我需要發送一個Content-Length
標頭。
出於內存使用和性能的考慮,我寧願不是實際上將Base-64一次解碼所有數據,而是將其流式傳輸。
給定base64數據,如何計算解碼數據的長度? 我需要通用算法或Java / Scala解決方案。
編輯:這類似於,但不是重復的計算實際數據大小從Base64編碼的字符串的長度 ,在OP詢問
...我可以僅通過查看 Base64編碼的字符串的長度來計算已編碼的原始數據的長度嗎?
答案是不。 還必須注意填充。
我想知道如何使用長度和base64數據來計算原始長度。
假設您不能只使用分塊編碼(從而避免發送Content-Length標頭),則需要查詢填充:
當然,在這種情況下,floor()意味着截斷整數除法,即法線/運算符。
大概您可以相對輕松地計算填充八位字節(例如,通過查找文件的末尾或通過查看字節數組的末尾),而不必順序讀取整個Base64編碼的東西。
我得出了這個簡單的計算。
如果L
是Base-64編碼數據的長度,而p
是填充字符的數量(將為0、1或2),則未編碼數據的長度為
L * 3 / 4 - p
就我而言(使用Scala),
bytes.length * 3 / 4 - bytes.reverseIterator.takeWhile(_ == '=').length
注意:這是假定數據沒有行分隔符。 (通常,Base-64數據每72個字符左右會有換行符。)如果這樣,則從長度L
排除行分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.