gpt4 book ai didi

c# - 解码大型 Base64 字符串

转载 作者:行者123 更新时间:2023-11-30 22:01:00 25 4
gpt4 key购买 nike

我有一个来自 WebService 的输入字符串,其形式为大约 70 MB 的大型 base64 编码字符串。

我想将其解码为一个文件,并尝试了显而易见的方法:使用 Convert.FromBase64String()

然而,这会产生一个 OutOfMemoryException。看了一会,发现Convert方法与Base64有关

leak memory (no doubt due to the immutable nature of strings and some poor design inside the framework methods) source

System.Security.Cryptography 命名空间中有一个方便的“流式”替换:FromBase64Transform

所以,我决定尝试一下,但我需要向方法输入一个 byte 数组,我没有 - 我有一个字符串。

如何将我拥有的 string 转换为 byte 而不会在 that 转换中遇到另一个 OutOfMemoryException又是?

最佳答案

虽然您可能可以将字符串转换为内存中的字节数组而不用担心内存使用,但您可以通过以下方式流式传输转换:

var input = "abcdefghijklmnop";
byte[] output;
using (var ms = new MemoryStream())
using (var cs = new CryptoStream(ms, new FromBase64Transform(), CryptoStreamMode.Write))
using (var tr = new StreamWriter(cs))
{
tr.Write(input);
tr.Flush();
output = ms.ToArray();
}

如果将 MemoryStream 替换为合适的 FileStream,则可以直接流式传输到文件而不是数组:

var input = new string('a', 400000000);
byte[] output;
using (var ms = new FileStream(Guid.NewGuid().ToString() + ".bin", FileMode.Create))
using (var cs = new CryptoStream(ms, new FromBase64Transform(), CryptoStreamMode.Write))
using (var tr = new StreamWriter(cs))
{
tr.Write(input);
tr.Flush();
}

关于c# - 解码大型 Base64 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28105486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com