为什么float的二进制序列化使用55个字节?

Tom*_*try 3 c# serialization

我有一个任务是花费数百万个浮点数并将它们以5,000个批量存储在数据库中,作为二进制文件.这迫使我学习有关序列化性能的有趣事情.

令我惊讶的一件事是序列化数据的大小,比我预期的要高十倍.这个测试向我展示了一个四字节的浮点数被串行化为55个字节,一个8字节的双精度数转换为59个字节.

这里发生了什么?我希望它简单地将浮点值分成四个字节.其他51个字节是什么?

private void SerializeFloat()
{
    Random rnd = new Random();
    IFormatter iFormatter = new BinaryFormatter();

    using (MemoryStream memoryStream = new MemoryStream(10000000))
    {
        memoryStream.Capacity = 0;
        iFormatter.Serialize(memoryStream, (Single)rnd.NextDouble());
        iFormatter.Serialize(memoryStream, rnd.NextDouble());
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*116 5

序列化不仅仅是将比特和字节串联到流中.序列化是结构化输出.此结构可以解释您的实际差异.该框架对其他信息进行编码,使其了解序列化数据中对象的类型和数量,以及许多其他可能性.这是一个最好的实施细节.

如果您需要非结构化输出,你可以使用BinaryWriter代替.