日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于DNF的多媒体包NPK文件的那些事儿(4)- NPK文件操作流程

發布時間:2023/12/9 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于DNF的多媒体包NPK文件的那些事儿(4)- NPK文件操作流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了編程方便。將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,重寫(基本都要重寫);

對data3,根據data1、data2重新計算校驗碼;

對data4,需要在計算變動目錄項的偏移量時進行記錄,然后根據該記錄值來進行流的增刪。


下面列出幾個基本操作的處理流程。


1. 增加IMG(PUSH)

輸入:IMG對象(IMG文件流),IMG名字

處理方式:

a. 先生成一個索引項:偏移量 = NPK大小,大小 = IMG文件流大小,名字 = IMG名字;

b. 在目錄后插入這個索引項;

c. 因為目錄中增加了一個索引項,目錄內的索引項的偏移量都增加264個字節(等于一個IMG索引項的大小);

d. IMG數加1;

e. 重新計算data1、data2、data3;

f. data4文件后直接插入IMG文件流。


2. 插入IMG(INSERT)

輸入:插入位置pos(若插入位置為最后,則演變為PUSH,但PUSH不是INSERT的特例),IMG對象,IMG名字

處理方式:

a. 先生成一個索引項:偏移量 = 目錄在pos處索引項的偏移量,大小 = IMG文件流大小,名字 = IMG名字;

b. 將這個索引項的偏移量記錄下來,減去當前的data1、data2、data3的總長度之和,得到data4插入數據在data4內部的偏移量,記錄下來;

b. 在目錄的pos處插入這個索引項;

c. 因為目錄中增加了一個索引項,目錄內的索引項的偏移量都增加264個字節;

d. 目錄中pos處之后的索引項,偏移量增加IMG文件流的大小個字節;

e. IMG數加1;

f. 重新計算data1、data2、data3;

g. data4文件中,在b步驟所記錄下的偏移量處,插入IMG文件流。


3.刪除IMG(DELETE)

輸入:刪除位置pos

處理方式:

a. 生成一個索引項從目錄的pos處提取出來即可,其:偏移量 = 目錄在pos處索引項的偏移量,大小 = 目錄在pos處索引項的大小,名字不用管;

b. 記錄該索引項的偏移量,減去當前的data1、data2、data3的總長度之和,得到data4待刪除數據在data4內部的偏移量,記錄下來;

c. 在目錄處的pos處刪除這個索引項;

d. 因為在目錄中刪除了一個索引項,目錄內所有索引項的偏移量都減少264個字節;?

e. 目錄中pos處和pos處之后的索引項,偏移量減少a步驟中索引項的大小個字節;(注:由于pos處原索引項已刪除,所以當前pos處實質上是原pos+1處索引項)

f. IMG數減1;

g. 重新計算data1、data2、data3;

h. data4文件中,在b步驟所記錄下的偏移量處,刪除等于a步驟中索引項的大小個字節。


4.替換IMG(REPLACE)

輸入:替換位置pos、替換后的IMG對象

處理方式:

a. 生成一個索引項:從目錄的pos處提取出來即可,其:偏移量 = 目錄在pos處索引項的偏移量,大小 = 目錄在pos處索引項的大小,名字不用管;

b. 記錄該索引項的偏移量,減去當前的data1、data2、data3的總長度之和,得到data4待替換數據在data4內部的偏移量,記錄下來;

c. 在目錄的pos處找到這個索引項,把大小變成IMG文件流的大小,其他不變;

e. 目錄中pos出之后的索引項,偏移量減少原索引項(步驟a提取出的索引項)的大小再增加IMG文件流的大小;

f. 重新計算data2、data3;

g. data4文件中,在c步驟所記錄的偏移量處,先刪除等于原索引項的大小個字節,再插入IMG文件流即可。


5.重命名(RENAME)

輸入:重命名位置pos、命名后的字符串

處理方式:

a. 將目錄中pos處索引項的名字變為命名后的字符串;

b.重新計算data2、data3。


以上

總結

以上是生活随笔為你收集整理的关于DNF的多媒体包NPK文件的那些事儿(4)- NPK文件操作流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。