为了编程方便。将NPK文件流分为四个部分。
NPK文件解析的时候将流分割成四个部分存入对应的缓冲区;NPK文件修改时对四个部分直接进行物理修改;保存的时候只需要重新串起来就可以了。
因此一个NPK对象可以这么定义:逻辑值包括目录(即IMG索引)、IMG个数;物理值包括四个数据流。
四个流命名为data1, data2, data3, data4,在对NPK进行读取时不可变,对NPK进行修改时可变,用途如下:
data1:包含NPK头的NeoplePack_Bill字符串以及包含img的个数。定长20字节。
data2:IMG目录,包含IMG的所有索引项。长度为264字节×项数(即data1里img的个数)。
data3:NPK校验位,为data1和data2加起来后前17字节的整数倍的SHA256校验码。定长32字节。
data4:IMG文件数据首尾相接构成的大数据流,占NPK文件的绝大部分。
修改NPK时一般的步骤如下:
1. 先修改逻辑值,即IMG个数以及目录:
若涉及IMG插入与删除操作,则IMG个数相应地增加或减少;
当IMG发生修改或者添加或减少的时候,先将输入IMG索引项的三个参数(偏移量、大小、名字)确定,然后根据内部内容的变化,调整所有索引项内的偏移量。
2. 修改完逻辑值后,根据逻辑值调整物理值:
对data1,若IMG个数变化,则需要重写(或者只修改最后4字节);
对data2,重