如何使用swift 4从一个双精度数组中写入一部分原始位?

如何使用swift 4从一个双精度数组中写入一部分原始位?,swift,io,swift4,Swift,Io,Swift4,我有一些代码,目前使用nsarray将数据保存到文件中。文件的大小对于我的需要来说太大了,所以我希望能够将一个双倍数组写入到文件中,同时可能还会删除一些不重要的位 var arr: [[Float]] = [] arr.append([Double(1.0), Double(2.0), Double(3.0)] arr.append([Double(4.0), Double(5.0), Double(6.0)] if let outputStream = OutputStream(url: g

我有一些代码,目前使用nsarray将数据保存到文件中。文件的大小对于我的需要来说太大了,所以我希望能够将一个双倍数组写入到文件中,同时可能还会删除一些不重要的位

var arr: [[Float]] = []
arr.append([Double(1.0), Double(2.0), Double(3.0)]
arr.append([Double(4.0), Double(5.0), Double(6.0)]

if let outputStream = OutputStream(url: getFileUrl(), append: true) {
    outputStream.open()
    for sub_array in arr {
         for item in sub_array {
             outputStream.write(one_quarter_of_bits(item))
         }
    }
    outputStream.close()
}

上面是psuedo代码。文件尽可能小是一个重要的设计目标,包括删除一些不重要的位

您可以自定义数学,但您必须自己实现它。您可以读取
浮点
的尾数和指数,将它们四舍五入到对您的应用程序有意义的任何值,然后将它们组合到
数据
实例中。如果我理解正确,您想将双精度数组(64位)转换为半精度数组(16位)?然后看这个问题:@alexander,如果我将nsdata对象写入文件,它会写入对象的原始位还是二进制表示。当我阅读文档和实践时,它看起来就像后者。我想写尽可能小的文件。这取决于你使用的是什么序列化格式,确切地说?@alexander使用了nsmutablearrays的嵌套nsmutablearrays和write方法。
var arr: [[Float]] = []
arr.append([Double(1.0), Double(2.0), Double(3.0)]
arr.append([Double(4.0), Double(5.0), Double(6.0)]

if let outputStream = OutputStream(url: getFileUrl(), append: true) {
    outputStream.open()
    for sub_array in arr {
         for item in sub_array {
             outputStream.write(one_quarter_of_bits(item))
         }
    }
    outputStream.close()
}