我有一个由4096(16 ^ 3)字节组成的文本文件,我需要加载并投入3D数组。每个字节代表16 ^ 3块中的瓦片ID,那么如何基于具有16个长度,宽度和深度的1D阵列创建3D阵列?我知道算法是这样的:
i = x + WIDTH * (y + HEIGHT * z);
z = Math.round(i / (WIDTH * HEIGHT));
y = Math.round((i - z * WIDTH * HEIGHT) / WIDTH);
x = i - WIDTH * (y + HEIGHT * z);
我怎么找到我?我不明白,考虑到我是计算x,y和z变量的变量。
答案 0 :(得分:0)
你可以使用三个嵌套循环来完成它。使用您提供的第一个公式,从一组x
,y
和z
转到1D数组中的相应索引,如下所示:
byte[] data = ... // Read 4096 bytes
byte[][][] res = new byte[16][16][16];
for (int x = 0 ; x != 16 ; x++) {
for (int y = 0 ; y != 16 ; y++) {
for (int z = 0 ; z != 16 ; z++) {
res[x][y][z] = data[16*16*x + 16*y + z];
}
}
}
取决于数据的组织方式(例如,按层,然后按行,按列,按列,然后按图层,按行,按行,然后按列,再按图层等)。 )您可能需要在计算索引时将x
,y
和z
的顺序切换为data
数组。
答案 1 :(得分:0)
试试这个
byte[][][] a = new byte[16][16][16];
InputStream is = new FileInputStream("file");
for(int i = 0; i < 16; i++) {
for(int j = 0; j < 16; j++) {
is.read(a[i][j]);
}
}
请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html