我需要編寫一個文件格式來將數據寫入文件並且可以讀取它。如何將二進制數據寫入文件以便快速讀取?
它應該能夠以相當快的速度讀取數據,這應該涉及將大塊數據分塊寫入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