我使用RandomAccessFile写入文件。数据(字段)以固定字段长度存储,例如,每个字段将分配16个字节的空间。我通过使用seek()将指针放置到适当的位置来写入内容。当我覆盖某些字段时出现问题,即,如果" Bangalore"如果用"德里"结果是" Delhilore"。如何删除"班加罗尔"完全在写作之前"德里"?
如果value是我要写的字符串,length是固定字段长度(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();
}
答案 0 :(得分:0)
您需要覆盖整个16个字节。如何做到这一点的一个例子是:
ByteBuffer buf = ByteBuffer.allocate(16);
buf.put(value.getBytes("UTF-8"));
database.seek(offset);
database.write(buf.array());
这将在记录内容之后写入尾随零。
但请注意,对于您编写的每条记录,这涉及两个系统调用,如果您使用该文件的内存映射,则可以避免这些调用。请参阅FileChannel.map()
。