簡體   English   中英

使用RandomAccessFile將數據寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM