У меня есть некоторые воксельные данные, которые я хотел бы сохранить с помощью BinaryWriter, а затем прочитать с помощью BinaryReader, но у меня возникли некоторые проблемы.
Когда я читаю их снова, кажется, что данные находятся в другом порядке и, таким образом, мои полученные воксельные фрагменты получают неправильные значения. Насколько я понял, вы должны прочитать данные в том порядке, в котором вы их написали, что я и должен делать.
Я просмотрел несколько примеров, но все они привели меня к этой проблеме. Я не знаю, что я делаю не так.
Я создал здесь некоторый тестовый код, чтобы сначала записать в файл, а затем прочитать его сразу после этого, а затем проверить, соответствуют ли загруженные значения значениям, которые он сохраняет. , В результате он всегда не совпадает и всегда останавливается на одном и том же месте.
Block[] blocksToSave = chunk.blocks.GetBlocks();
using (BinaryWriter writer = new BinaryWriter(File.Open(Application.persistentDataPath + "/test.bin", FileMode.OpenOrCreate)))
{
for (int i = 0; i < blocksToSave.Length; i++)
{
writer.Write(blocksToSave[i].id); // The ID is just a byte value.
}
}
byte[] loadedBlocks = new byte[Chunk.CHUNK_SIZE * Chunk.CHUNK_SIZE * Chunk.CHUNK_SIZE]; // 16 * 16 * 16
using (BinaryReader reader = new BinaryReader(File.Open(Application.persistentDataPath + "/test.bin", FileMode.Open)))
{
int pos = 0;
int index = 0;
int streamLength = (int)reader.BaseStream.Length;
while (pos < streamLength)
{
byte id = reader.ReadByte();
loadedBlocks[index] = id;
pos += sizeof(int);
index++;
}
}
if (blocksToSave.Length != loadedBlocks.Length)
{
Debug.LogError("Sizes does not match!");
return;
}
for (int i = 0; i < blocksToSave.Length; i++)
{
if (blocksToSave[i].id != loadedBlocks[i])
{
Debug.LogError("Expected " + blocksToSave[i].id + " but got " + loadedBlocks[i] + " at index " + i + ".");
return;
}
}
Любая помощь, чтобы понять, в чем проблема, высоко ценится!
Спасибо