1

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

我在使用 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 保留一个哈希图以定位修改的位置。不确定这是否是正确的方法

4

1 回答 1

1

我不认为你的方法会像你想象的那样奏效。RandomAccessFile 用于在任意位置读取和写入字节。您当然可以将对象序列化为字节数组,然后将其写入 RAF(或仅使用文件输出流写入序列化字节) - 但是当您想要更新记录时,这对您没有帮助,因为序列化形式每次更改时,记录的长度可能会有所不同。

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

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

于 2012-03-10T04:59:30.413 回答