[英]How to safely convert `ToBase64String` in chunks?
這是我目前的代碼:
public void WriteXml(System.Xml.XmlWriter writer)
{
CloseConnection();
using (Stream source = File.Open(DataBaseFileName, FileMode.Open))
{
byte[] buffer = new byte[source.Length];
source.Read(buffer, 0, (int)source.Length);
writer.WriteString(Convert.ToBase64String(buffer));
}
OpenConnection();
}
這樣做是將數據庫嵌入到XML文件中(此方法屬於另一個類中正在序列化的類中的字段的類)。 問題是每當數據庫大約300MB時,我在byte[] buffer = new byte[source.Length];
上得到一個OutOfMemory異常byte[] buffer = new byte[source.Length];
線。 所以我猜我需要在大塊上做。 但我不確定那是怎么回事。 我認為這些塊需要具有特定的大小。 此外,我認為Convert.ToBase64String
將在字符串的末尾添加兩個“==”符號,因此我可能每次都要刪除它們,直到最后一個。
Base64將每個6位序列編碼為一個字符。 (因此名稱:2 ^ 6 = 64個可能的字符。)
因此,4個這樣的字符恰好對准3個字節(24位)。
換句話說,塊的大小必須是3:3字節,或6字節或300字節的倍數......
base64將始終填充4個字符的多個。 我想只要你砍下N * 4大小的塊你就可以了。
找到一個Base64流類: 鏈接文本
為什么不這樣做:
writer.WriteString(Convert.ToBase64String(File.ReadAllBytes(DataBaseFileName)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.