簡體   English   中英

如何安全地轉換塊中的ToBase64String?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM