在Java中使用随机访问文件更新部分文件
我正在尝试使用随机访问文件来更新二叉树。但我只想更新刚刚修改过的节点,而不是每次添加节点时都重写整个树。到目前为止,我有两个问题: 我在使用RandomAccessFile将对象写入文件时遇到问题。因为它是一个节点对象,所以RAF没有任何读/写方法。我确实为我的树类实现了Serializable,但仍然不确定如何将树写入文件在Java中使用随机访问文件更新部分文件,java,serialization,random-access,Java,Serialization,Random Access,我正在尝试使用随机访问文件来更新二叉树。但我只想更新刚刚修改过的节点,而不是每次添加节点时都重写整个树。到目前为止,我有两个问题: 我在使用RandomAccessFile将对象写入文件时遇到问题。因为它是一个节点对象,所以RAF没有任何读/写方法。我确实为我的树类实现了Serializable,但仍然不确定如何将树写入文件 Node<String> mynode = new Node<String>(); RandomAccessFile raf = new Rando
Node<String> mynode = new Node<String>();
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");
raf.write(mynode, 0, 100);
Node mynode=new Node();
RandomAccessFile raf=新的RandomAccessFile(“raf.txt”、“rw”);
raf.write(mynode,01100);
我得到一个错误,因为mynode
不是字节[]
我的第二个问题是我不确定如何寻找要覆盖的文件。我所做的是在节点中为id添加一个额外的字段,并为id:position保留一个hashmap来定位修改的位置。不确定这是否正确我认为你的方法不会像你认为的那样奏效。RandomAccessFile用于在任意位置读取和写入字节。当然,您可以将对象序列化为一个字节数组,然后将其写入RAF(或者只使用fileoutputstream写入序列化的字节),但这对您更新记录没有帮助,因为每次更改记录时,记录的序列化形式可能会有不同的长度 正如其中一条评论中所提到的,您正在寻找的是一个数据库——一个比RandomAccessFile提供给您访问的简单线性字节链更高级别的抽象
如果您正在寻找一种可以读写记录的基于文件的存储系统(即,一种重量轻的嵌入式数据库),请查看-它还内置了b-树结构(对于基于文件的存储来说,b-树结构比二叉树好得多)。我认为您的方法不会像您认为的那样奏效。RandomAccessFile用于在任意位置读取和写入字节。当然,您可以将对象序列化为一个字节数组,然后将其写入RAF(或者只使用fileoutputstream写入序列化的字节),但这对您更新记录没有帮助,因为每次更改记录时,记录的序列化形式可能会有不同的长度 正如其中一条评论中所提到的,您正在寻找的是一个数据库——一个比RandomAccessFile提供给您访问的简单线性字节链更高级别的抽象
如果您正在寻找能够读取和写入记录的基于文件的存储系统(即,一个轻量级嵌入式数据库),请查看-它还内置了b树结构(这对于基于文件的存储比二叉树要好得多)。为什么要将其存储在文件中?在现实世界中,您几乎总是希望使用数据库。为什么要将其存储在文件中?在现实世界中,您几乎总是希望使用数据库。