0

本来の動作をしていないように見えるコードがあります。全体のポイントは、整数の 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 バイト以降のすべてが空白になる原因は何でしょうか?

前もって感謝します。

4

1 に答える 1

1

で初期化されたときと比較iするのはなぜですか? 代わりに使うべきだと思います。chunkdata.lengthistartcounter

現時点の:

   int counter = 0;
   for(int i=start;i<chunkdata.length;i++){
      file[i]=chunkdata[counter]; //Data loss here?
      counter++;
   }

代わりに、次のように記述します。

   int counter = 0;
   for(int i=start;counter<chunkdata.length;i++){
       file[i]=chunkdata[counter]; //Data loss here?
       counter++;
   }

またはよりコンパクトな方法:

   for(int i=start,counter = 0;counter<chunkdata.length;i++,counter++){
       file[i]=chunkdata[counter]; //Data loss here?
   }
于 2012-10-15T04:31:36.570 に答える