软件推荐 › asar
asar
软件介绍
asar文件格式
ASAR 全称是 Atom Shell Archive Format。asar 归档文件采用类似 tar 的简单格式,将众多文件合并为一个单一文件。Electron 能够在无需解压整个文件的情况下,从中随机读取特定文件。
创建 ASAR 格式的主要目的,是为了在 Windows 系统上提升读取众多小文件时的性能,例如在从 node_modules 中加载应用程序的 JavaScript 依赖时。
文件头部包含一个 JSON 格式的字符串,记录其中包含的文件结构以及所有文件的起始位置以及文件长度:
{
"files": {
"tmp": {
"files": {}
},
"usr" : {
"files": {
"bin": {
"files": {
"ls": {
"offset": "0",
"size": 100,
"executable": true,
"integrity": {
"algorithm": "SHA256",
"hash": "...",
"blockSize": 1024,
"blocks": ["...", "..."]
}
},
"cd": {
"offset": "100",
"size": 100,
"executable": true,
"integrity": {
"algorithm": "SHA256",
"hash": "...",
"blockSize": 1024,
"blocks": ["...", "..."]
}
}
}
}
}
},
"etc": {
"files": {
"hosts": {
"offset": "200",
"size": 32,
"integrity": {
"algorithm": "SHA256",
"hash": "...",
"blockSize": 1024,
"blocks": ["...", "..."]
}
}
}
}
}
}
offset 和 size 用于记录从存档文件中读取具体文件所需的信息。由于 offset 计数是从 0 开始,因此要获取文件的实际偏移量,需要手动将 header_size 和 header 的大小加到 offset 值上。
在这里,offset 用字符串格式表示的 UINT64 数字,因为 JavaScript 的 Number 类型无法精确表示 UINT64。而 size 则是一个不超过 Number.MAX_SAFE_INTEGER(即 9007199254740991,约合 8PB)的 JavaScript 数字。
integrity 是一个包含几个关键元素的对象:
- 一种哈希算法,目前仅支持 SHA256。
- 一个代表整个文件哈希的十六进制编码哈希值。
- 一个包含文件各个块的十六进制编码哈希值的数组。例如,如果 blockSize 设置为 4KB,那么这个数组将包含将文件分割成若干个 4KB 块后,每个块的哈希值。
- 一个整型值 blockSize,用来表示上述各块哈希中,每个块的字节大小。
asar文件解压
asar extract app.asar