快速读取二进制文件

时间:2019-09-29 18:17:04

标签: swift

Xcode版本11.0(11A420a)

        var byteArray: [UInt8] = []
        do {
            let data:NSData = try NSData(contentsOfFile: path)
            print("Data Len: " + String(data.length))
            var buffer = [UInt8](
                unsafeUninitializedCapacity: data.length,
                initializingWith: {_,_ in}
            )
            print("Buffer Len: " + String(buffer.count))
            data.getBytes(&buffer, length: data.length)
            byteArray = buffer
            print("Array Len: " + String(byteArray.count))
        } catch {
            print("Load Error")
            addChild(ErrorViewController())
            return
        }

这没有错误,但返回的长度为0。打印输出为:

  

数据镜头:3020

     

缓冲镜头:0

     

阵列透镜:0

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

var buffer = [UInt8](
    unsafeUninitializedCapacity: data.length,
    initializingWith: {_,_ in}
)

不执行任何操作,因为闭包不执行任何操作(它应初始化第一个闭包参数所指向的元素存储,然后设置第二个闭包参数initializedCount)。还有这个

data.getBytes(&buffer, length: data.length)

什么都不做,因为buffer为空。

话虽如此,您只需使用

将文件读入Data
let data = try NSData(contentsOfFile: path) as Data
// or better:
let data = try Data(contentsOf: URL(fileURLWithPath: path))

,然后使用Data值。如果您确实需要将数据复制到数组中,则可以使用

let byteArray = Array(data)