c#二进制序列化到文件逐行或如何分离

标签 c# .net json file serialization

我在运行时有一个对象集合,它已经是可序列化的,我需要将对象的状态持久化到一个文件中。我使用 BinaryFormatter 进行了快速编码,并将序列化对象保存到文件中。

我在想我可以每行保存一个对象。但是当我在记事本中打开文件时,它比一行长。它没有滚动。我如何每行存储一个二进制序列化对象?

我知道我可以在每个对象后使用一个分隔符,这样在将它们读回应用程序时,我可以知道对象的结尾。那么,根据信息论,这会增加数据的大小(Sipser 书)。

提出不会破坏信息的分隔符的最佳算法是什么?

而不是二进制序列化?你认为 JSON 格式更可行吗?我可以以 json 格式逐行存储实体吗?

此外,序列化/反序列化会引入开销,影响性能。 Json 会更快吗?

想法?

谢谢。

谢谢。

最佳答案

序列化功能类似于 FIFO 队列,您不必读取文件的任何部分,因为格式化程序会为您完成,您只需要知道将对象放入其中的顺序即可。

public class Test
    {

        public void testSerialize()
        {
            TestObj obj = new TestObj();
            obj.str = "Some String";
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(stream, obj);
            formatter.Serialize(stream, 1);
            formatter.Serialize(stream, DateTime.Now);
            stream.Close();
        }

        public void TestDeserialize()
        {
            Stream stream = new FileStream("MyFile.bin", FileMode.Open, FileAccess.Read, FileShare.None);
            IFormatter formatter = new BinaryFormatter();
            TestObj obj = (TestObj)formatter.Deserialize(stream);
            int obj2 = (int)formatter.Deserialize(stream);
            DateTime dt = (DateTime)formatter.Deserialize(stream);
            stream.Close();
        }
    }

    [Serializable]
    class TestObj
    {
        public string str = "1";
        int i = 2;
    }

关于c#二进制序列化到文件逐行或如何分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812317/

相关文章:

.net - 如何在 C# 中创建 JSON 对象,其中属性名称是动态设置的?

c# - 我如何接收发送到 gtalk 的消息?

c# - 将异步回调传递给 Timer 构造函数

c# - 如何使用 HA 配置连接到 IBM MQ Manager?

.NET Standard 2.0 NuGet 包生成

JavaScript $.parseJSON 错误 - SyntaxError : JSON. 解析:JSON 数据第 1 行第 1 列出现意外字符

c# - 在 LINQ 语句中执行多个连接

c# - 如何使用新的任务并行库确保两个任务在不同的线程甚至不同的处理器上运行?

c# - 覆盖 Equals() 但不检查所有字段 - 会发生什么?

c - 如何在 JSON 字符串中存储传感器值