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