使用随机访问文件以Java格式更新文件的一部分

时间:2012-03-10 02:15:45

标签: java serialization random-access

我正在尝试使用随机访问文件来更新二叉树。但我只想更新刚修改过的节点,而不是每次添加节点时都重写整个树。到目前为止我有两个问题:

我在使用RandomAccessFile将对象写入文件时遇到问题。由于它是节点对象,因此RAF没有任何读/写方法。我确实为我的树类实现了Serializable,但仍不确定如何将树写入文件。

Node<String> mynode = new Node<String>();
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");
raf.write(mynode, 0, 100);

我收到错误,因为mynode不是byte[]

我的第二个问题是我不确定如何寻找文件来覆盖。我所做的是在节点中为id添加一个额外的字段,我为id:position保留一个hashmap来定位修改的位置。不确定这是否正确

1 个答案:

答案 0 :(得分:1)

我不认为你的方法会以你认为的方式运作。 RandomAccessFile用于在任意位置读取和写入字节。您当然可以将对象并将其序列化为一个字节数组,然后将其写入RAF(或者只使用fileoutputstream编写序列化的字节) - 但是当您想要更新记录时,它不会帮助您因为每次更改记录的序列化形式可能会有不同的长度。

正如其中一条评论中所提到的,您正在寻找的是一个数据库 - 比RandomAccessFile允许您访问的简单线性字节链更高级别的抽象。

如果您正在寻找可以读取和写入记录的基于文件的存储系统(即轻量级嵌入式数据库),请查看jdbm2 - 它还内置了b树结构(这是基于文件的商店比二叉树更好。