有效地序列化锯齿状字节数组

Lad*_*gic 5 .net c# wcf datacontractserializer

我有一个DataMember返回的锯齿状数组,byte[800][10000][1]转换为~8MB的数据.使用DataContractSerializer它进行序列化时,二进制文件大小为120MB,文本大小为300MB.查看文本序列化,它表示它在每个字节值周围放置一个标记,以指示它的base64编码值等,这可能是此大小放大的原因.

什么是使用DataContractSerializer(或任何其他序列化器)序列化大型锯齿状blob的有效方法

使用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>
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

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

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