树形结构的文件存储
一、目标
把树形结构用文件来保存,设计具体的存放格式。
二、树形节点的约定
假设节点只有下列格式:
node {
id 整形,是主键。
pid 长整形,是父节点主键。
name 10字节字符串,是节点名字。
size 整形,是子节点个数。
childs[] 数组类型,是子节点的主键集合。
}
三、设计文件保存格式
有两种:字符串格式和二进制格式。
(一)XML文件格式
有很多的<node>元素,用属性来连接和指向。
<nodes>
<node id="k01" pid="None" name="节点1">
<childs>
<child>k02</child>
</childs>
</node>
<node id="k02" pid="k01" name="节点2">
<childs>
</childs>
</node>
</nodes>
(二)二进制格式
每个节点连续存放,父节点指针和子节点指针指向文件偏移量位置。
每个节点存放格式如下:
主键(4字节,整型)
名字(10字节,字符串)
父节点指针(8字节,文件偏移量)
子节点个数(4字节,整型)
子节点指针集合(每个8字节,连续存放)
写完每个子节点,还需要把文件偏移量设置到父节点记录中。
节点写入接口设计:
// 参数: id是主键,pid是父节点指针,name是节点名字,size是子节点个数
// 返回值:节点起始的文件指针偏移量
long writeNode(int id, long pid, String name, int size)
