高效序列化不规则的字节数组

5
我有一个不规则数组 DataMember,返回的是byte[800][10000][1],大约8MB的数据。使用 DataContractSerializer 进行序列化时,二进制文件大小为120MB,文本文件大小为300MB。查看文本序列化,发现它会在每个字节值周围添加标记,以指示它是base64编码值等,这可能是导致文件变大的原因。
如何使用 DataContractSerializer(或任何其他序列化程序)高效地序列化大型不规则数据块?
序列化为Text时的XML输出片段:
<a:ArrayOfbase64Binary><a:base64Binary>CQ==</a:base64Binary><a:base64Binary>Bw==</a:base64Binary><a:base64Binary>BQ==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AQ==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>BA==</a:base64Binary><a:base64Binary>Bg==</a:base64Binary><a:base64Binary>CA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary>
1个回答

5

如果您只关心性能而不关心与其他系统的互操作性,可以尝试使用BinaryFormatter

byte[800][10000][1] foo = ... fetch it
BinaryFormatter formatter = new BinaryFormatter();
using (var stream = File.OpenWrite("foobar.dat"))
{
    formatter.Serialize(stream, foo);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接