gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:02:30 25 4
gpt4 key购买 nike

我在运行时有一个对象集合,它已经是可序列化的,我需要将对象的状态持久化到一个文件中。我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com