Le moyen le plus rapide de le faire est de tout stocker dans un fichier et de déplacer le curseur sur le bloc que vous souhaitez lire. Une fois que vous frappez le disque en lisant une séquence, son point est assez rapide.
Les multiples hits vers différents INodes pour trouver l'emplacement du fichier sur le volume physique ce qui prend la plupart du temps et aussi ce qui évolue mal.
De plus, comme c'est dynamique, vous aurez également besoin d'une carte qui stocke le décalage dans le fichier pour chaque bloc.
Sur disque
[Chunk 1][Chunk 2][Chunk 3][Chunk 4][Chunk 5][Chunk 6][Chunk 7][Chunk 8][Chunk 9]
Visible
[7][8][9]
[6][1][2]
[5][4][3]
Ensuite, il vous suffit d'ouvrir un flux qui lit à partir du fichier mais ne bloque pas l'accès à d'autres flux / processus. Ensuite, vous devez lire le décalage correct pour la bonne distance. Je crois qu'en C # c'est le dessous.
var chunk = new byte[4194304];
using (var file = new FileStream (openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = new StreamReader (file, Encoding.Unicode)) {
reader.Read(chunk, offset * 4194304, 4194304);
}
}
Maintenant, du fait que vous avez ouvert le flux en mode lecture seule et autorisez les autres à y lire / écrire, vous pouvez continuer à ajouter de nouveaux morceaux à la fin. Gardez simplement une trace de leur numéro de décalage et n'essayez pas de les lire avant qu'ils ne soient là.
PS vous n'allez pas vouloir utiliser le bloc using puisque vous ne voudrez qu'un seul flux de lecture à travers le cycle de vie que vous utilisez. De plus, vous devrez probablement enregistrer le mappage de morceaux dans un autre fichier à la sortie, mais ce n'est qu'une charge lorsque vous chargez votre niveau.