我需要编写一个文件格式来将数据写入文件并且可以读取它。如何将二进制数据写入文件以便快速读取?
它应该能够以相当快的速度读取数据,这应该涉及将大块数据分块写入std::vector
(因为它们的存储总是连续执行)。
但是,当写入文件时,我不知道如何强制对整数和其他类型的对齐和大小的约束。
应该怎么做?我在Q6600(x86)上的buntu linux上使用gcc。
只是作为一个例子:
struct Vertex
{
float point [3];
float normal [3];
float texcoord [2];
}
稍后,数据被存储在一个std::vector<Vertex>
。我曾考虑过使用__attribute__
并对其进行打包/对齐,以便在不同的平台上更便携。
编辑: 我已经制定了一个规范,我打算使用它。数据的最大位是顶点和索引,所以这些数据将被读为大块,例如(较大规格的一部分): VertexGroup是一组共享特征的顶点。他们一次只能容纳一种材料,因此网格中应该包含许多材料。
<uint> thisid # Of this VertexGroup
<string> name
<uint> materialId # A material
<uint> vertexCount
for (vetexCount):
<3xfloat> point
<3xfloat> normal
<2xfloat> texcoord
<uint> triangleCount
for (triangleCount):
<3xuint> indices
增强序列化有多快?这可以节省很多麻烦,看看它的工作原理会很有趣。我想知道它是如何处理数组的,并且它的速度有多快(文件中有100万个顶点,因此不会将整个数据块移到内存中)。 – solinent 2009-06-19 17:06:12