要读取一个二进制文件,首先要搞清楚的就是他的 文件格式,按照 byte 一个个去读取 所需要的信息即可


看下代码:
val file = File("/Users/njvivo/Desktop/company_code/forkBooster/FLATReader2/assets/test2.png.flat")
val chan = FileChannel.open(file.toPath(), StandardOpenOption.READ)
// 小端读
val buffer = chan.map(FileChannel.MapMode.READ_ONLY, 0, file.length()).order(ByteOrder.LITTLE_ENDIAN)
// 文件头
val magic = buffer.int
// 这里magic取出来是一个10进制的值 这里转成16进制就是flat的固定文件头了
println("magic:$magic ${magic.toString(16)}")
// aapt2 版本
val version = buffer.int
println("version:$version")
// 多少个资源项
val entryCount = buffer.int
println("entryCount:$entryCount")
// 文件类型
val entryType = buffer.int
println("entryType:$entryType")
// 内容长度 long一次性读8个byte
val entryLength = buffer.long
println("entryLength:$entryLength")
复制代码
我们也可以看下 dexdump出来的文件

这里注意涉