0

我正在使用 RandomAccessFile 写入文件。数据(字段)以固定的字段长度存储,例如,每个字段将分配 16 个字节的空间。我通过使用 seek() 将指针指向适当的位置来写一些东西。当我覆盖某些字段时出现问题,即,如果“Bangalore”存储较早,如果用“Delhi”覆盖它,结果是“Delhilore”。在写“Delhi”之前如何完全删除“Bangalore”?

如果值是我要写的字符串,长度是固定字段长度(16)

        byte[] b=new byte[length];

        b=value.getBytes();

        try 
        {
            database.seek(offset);
            database.write(b);


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
4

1 回答 1

0

您需要覆盖完整的 16 个字节。如何做到这一点的一个例子是:

ByteBuffer buf = ByteBuffer.allocate(16);
buf.put(value.getBytes("UTF-8"));
database.seek(offset);
database.write(buf.array());

这将在记录内容之后写入尾随零。

但是请注意,对于您编写的每条记录,这涉及两个系统调用,如果您使用文件的内存映射,则可以避免这些调用。见FileChannel.map()

于 2014-03-14T08:05:11.990 回答