c#二进制序列化逐行归档或如何分离

Dar*_*der 3 .net c# serialization json file

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

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

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

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

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

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

想法?

谢谢.

谢谢.

Mar*_*mić 6

序列化功能就像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;
    }
Run Code Online (Sandbox Code Playgroud)