这是我当前的代码:
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 异常。所以我想我需要分块做。但我不确定那会怎样。我认为这些 block 需要具有特定的大小。另外,我认为 Convert.ToBase64String
会在字符串末尾添加两个“==”符号,所以我可能每次都必须删除它们,直到最后一个。
最佳答案
Base64 将每个 6 位序列编码为一个字符。 (因此得名:2^6 = 64 个可能的字符。)
因此,4 个这样的字符正好对齐 3 个字节(24 位)。
换句话说,你的 block 的大小必须是3的倍数:3字节,或者6字节,或者300字节...
关于c# - 如何安全地分块转换 `ToBase64String`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4197337/