Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用随机访问文件更新部分文件_Java_Serialization_Random Access - Fatal编程技术网

在Java中使用随机访问文件更新部分文件

在Java中使用随机访问文件更新部分文件,java,serialization,random-access,Java,Serialization,Random Access,我正在尝试使用随机访问文件来更新二叉树。但我只想更新刚刚修改过的节点,而不是每次添加节点时都重写整个树。到目前为止,我有两个问题: 我在使用RandomAccessFile将对象写入文件时遇到问题。因为它是一个节点对象,所以RAF没有任何读/写方法。我确实为我的树类实现了Serializable,但仍然不确定如何将树写入文件 Node<String> mynode = new Node<String>(); RandomAccessFile raf = new Rando

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

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

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树结构(这对于基于文件的存储比二叉树要好得多)。

为什么要将其存储在文件中?在现实世界中,您几乎总是希望使用数据库。为什么要将其存储在文件中?在现实世界中,您几乎总是希望使用数据库。