如何安全地转换块中的ToBase64String?

时间:2010-11-16 17:59:36

标签: c# .net serialization

这是我目前的代码:

    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异常。所以我猜我需要在大块上做。但我不确定那是怎么回事。我认为这些块需要具有特定的大小。另外,我认为Convert.ToBase64String会在字符串的末尾添加两个“==”符号,所以我可能每次都要删除它们直到最后一个。

4 个答案:

答案 0 :(得分:3)

Base64将每个6位序列编码为一个字符。 (因此名称:2 ^ 6 = 64个可能的字符。)

因此,4个这样的字符恰好与3个字节(24位)对齐。

换句话说,块的大小必须是3:3字节,或6字节,或300字节的倍数......

答案 1 :(得分:1)

base64将始终填充4个字符的倍数。我想只要你用N * 4尺寸的块切成小块就可以了。

答案 2 :(得分:1)

找到Base64流类:link text

答案 3 :(得分:-1)

为什么不这样做:

writer.WriteString(Convert.ToBase64String(File.ReadAllBytes(DataBaseFileName)));