我正在使用非常大的地图制作基于图块的游戏,因此我不想将整个地图保存在内存中,因此我想保存地图并立即加载其中的一部分我怎么能这样做?
我想将地图保存为整数数组,并将整数分成两半:
int id = basetile | abovetile << 8
目前我正在使用一个块数组,每个块都有一个tile数组,所以我可以更新我需要的块,但我注意到我正在使用内存分配这么简单的事情
编辑:
我将如何编辑你放置的值()
public static void main(String[] args) {
File f = new File("file.sav");
f.delete();
try (FileChannel fc = new RandomAccessFile(f, "rw").getChannel()){
long buffersize = 100;
MappedByteBuffer mem = fc.map(FileChannel.MapMode.READ_WRITE, 0, buffersize);
mem.put(new byte[] {6, 4, 2});
mem.flip();
} catch (IOException e) {
e.printStackTrace();
}
}
如何
答案 0 :(得分:0)
我发现这段代码我非常轻微地编辑了
public static MappedByteBuffer save(String path, int[] data, int size) {
try (FileChannel channel = new RandomAccessFile(path, "rw").getChannel()) {
MappedByteBuffer mbb = channel.map(FileChannel.MapMode.READ_WRITE, 0, size);
mbb.order(ByteOrder.nativeOrder());
for (int i = 0; i < size; i++) {
mbb.putInt(data[i]);
}
channel.close();
return mbb;
} catch (Exception e) {
System.out.println("IOException : " + e);
}
return null;
}
public static int[] load(String path, int size, int offs) {
try (FileChannel channel = new RandomAccessFile(path, "r").getChannel()) {
MappedByteBuffer mbb2 = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
mbb2.order(ByteOrder.nativeOrder());
int[] data = new int[(int) channel.size()];
for (int i = 0; i < size; i++) {
data[i] = mbb2.getInt(i + offs);
}
channel.close();
return data;
} catch (IOException e) {
System.out.println(e);
}
return null;
}
感谢此方法的名称