[英]Writing data to a file using RandomAccessFile
我正在使用RandomAccessFile寫入文件。數據(字段)以固定的字段長度存儲,例如,每個字段將分配16個字節的空間。我通過使用seek()將指針放置在適當的位置來寫一些東西。 當我覆蓋某些字段時出現問題,例如,如果“ Bangalore”存儲得較早,而如果用“ Delhi”覆蓋它,則結果為“ Delhilore”。 在編寫“ Delhi”之前,如何完全擦除“ Bangalore”?
如果value是我要寫入的字符串,而length是固定字段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();
}
您需要覆蓋整個16個字節。 如何做到這一點的一個例子是:
ByteBuffer buf = ByteBuffer.allocate(16);
buf.put(value.getBytes("UTF-8"));
database.seek(offset);
database.write(buf.array());
這將在記錄內容之后寫入尾隨零。
但是請注意,對於您寫的每個記錄,這涉及兩個系統調用,如果您使用文件的內存映射,則可以避免。 請參見FileChannel.map()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.