保存一组int,然后加载某些元素

时间:2014-12-27 14:22:10

标签: java input output 2d-games

我正在使用非常大的地图制作基于图块的游戏,因此我不想将整个地图保存在内存中,因此我想保存地图并立即加载其中的一部分我怎么能这样做?

我想将地图保存为整数数组,并将整数分成两半:

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();
    }

}

如何

1 个答案:

答案 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;

}

感谢此方法的名称