本来の動作をしていないように見えるコードがあります。全体のポイントは、整数の 256x128x256x2 配列を取得し、それを 256 個の 16x128x16x2 チャンクに分割し、チャンクをバイト配列に処理してから、そのバイト配列を保存するバイトのメイン配列に追加することです。chunkdata[]
保存前は問題ありませんが、保存後は最初の 4096 バイトを除いてファイル全体が空白になります。ロケーション テーブル (ファイル内の各チャンクの場所) があり、最初の 4 バイトの「チャンク ヘッダー」があります。それ以外はすべて 0 であり、これは発生するはずがありません。
public void createFile(int[][][][] map){
byte[] file = new byte[fileLength]; //22,024,192 bytes long
System.arraycopy(Sector.locationTable, 0, file, 0, Sector.locationTable.length); //This works as it should
for(int cx = 0; cx < 16; cx++)
{
for(int cz = 0; cz < 16; cz++)
{
int start = sectorLength+cx*(sectorLength*chunkSectorLength)+cz*(chunkRows*sectorLength*chunkSectorLength); //this algorithm works, just rather hideous
int[][][][] chunk = getChunk(map, cx * 16, cz * 16); //This works as it should
byte[] chunkdata = putChunk(chunk); //The data from this is correct
int counter = 0;
for(int i=start;i<chunkdata.length;i++){
file[i]=chunkdata[counter]; //Data loss here?
counter++;
}
}
}
System.out.println("Saving file...");
writeFile(file, fileLocation);
}
public static void writeFile(byte[] file,String filename){
try{
FileOutputStream fos = new FileOutputStream(filename);
fos.write(file);
fos.close();
Messages.showSuccessfulSave();
}catch(Exception ex){
Messages.showFileSavingError(ex);
}
}
では、putChunk と getChunk が意図したとおりに機能し、私の恐ろしいアルゴリズムが機能すると仮定すると、最初の 4096 バイト以降のすべてが空白になる原因は何でしょうか?
前もって感謝します。