0

RandomAccessFile を使用してファイルに書き込んでいます。データ (フィールド) は固定フィールド長で格納されます。たとえば、すべてのフィールドに 16 バイトのスペースが割り当てられます。いくつかのフィールドを上書きすると問題が発生します。つまり、「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());

これにより、レコードの内容の後に末尾のゼロが書き込まれます。

ただし、書き込むレコードごとに、ファイルのメモリ マッピングを使用すると回避できる 2 つのシステム コールが含まれることに注意してください。を参照してくださいFileChannel.map()

于 2014-03-14T08:05:11.990 に答える