我正在创建一些保存文件的东西。在大多数情况下,它只是保存具有4个值的对象。
我一直把它保存为XML一段时间,问题是,文件开始变得巨大,因为我节省了数百到数千个这些对象,而XML对于这样的事情来说有点笨重。我尝试转换到Json,但它太大了(我会承认,但更好)。
我的问题
我知道很多程序直接使用字节来节省空间。我想做这个。假设我有300个具有属性X,Y,Id和Layer的对象,我怎么能将它保存为文件x作为字节并稍后加载?
我曾经尝试过制作自己的服务器时读取字节数。我通常最终感到沮丧和放弃。我希望这不太相似(我的直觉另有说法)。
修改
对不起伙计们,我忘了提及,我正在使用VB.NET
因此所有.NET
个答案都可以接受! :)
此外,所有这些值都是整数。
答案 0 :(得分:6)
我会使用protobuf-net(我愿意;我有偏见......)。它是一个开源的.NET序列化程序,它使用属性(嗯,在v2中是可选的)来指导它。例如,使用C#语法(纯粹为了我的方便 - 引擎不关心你使用的语言):
[ProtoContract]
public class Whatever {
[ProtoMember(1)]
public int X {get;set;}
[ProtoMember(2)]
public int Y {get;set;}
[ProtoMember(3)]
public long Id {get;set;}
[ProtoMember(4)]
public string Layer {get;set;}
}
然后您可以序列化,例如:
List<Whatever> data = ...
Serializer.Serialize(file, data);
和反序列化:
var data = Serializer.Deserialize<List<Whatever>>(file);
完成工作;快速二进制输出。您可能可以通过手动编码所有读/写而不需要任何标记等来获得小更紧密,但上述内容将更少维护。它也很容易加载到任何其他具有“协议缓冲区”实现的平台(其中大部分都是)。
答案 1 :(得分:2)
替代: 为什么不用xml和zip(或其他一些压缩)
优势:
*它仍然是“人类”可读的
*文本文件通常具有良好的压缩因子
你还在使用什么编程语言?
在C / C ++中,或者使用数据创建结构
重新解释将struct转换为byte *并将sizeof字节写入文件......就这么简单
(假设结构是固定大小的(id和layer也是固定大小的变量,如int)
答案 2 :(得分:0)
为什么不使用像MySql或SQL这样的数据库?