Swift处理和存储二进制数据的Data
Swift处理和存储二进制数据的Data

Swift处理和存储二进制数据的Data

Data 是 Swift 标准库中的一个结构体,设计用于处理和存储任意二进制数据。它在很多情况下非常有用,例如网络数据传输、文件操作、编码/解码等。

核心特点

1、二进制数据容器

Data 是一种轻量级、动态大小的二进制数据容器。

2、高效

适合处理任意长度的二进制数据,提供了良好的性能和灵活性。

3、安全性

提供了类型安全的接口,防止内存溢出等问题。

4、兼容性强

Data 可以与许多系统 API(例如文件系统、网络请求等)很好地配合使用。

创建 Data 的方法

1、使用字节数组初始化

let byteArray: [UInt8] = [0x41, 0x42, 0x43]
let data = Data(byteArray)
print(data) // 输出:3 bytes

2、从字符串创建

通过 UTF-8 或其他编码将字符串转换为 Data:

let string = "Hello"
let data = Data(string.utf8)
print(data) // 输出:5 bytes

3、从文件加载

let fileURL = URL(fileURLWithPath: "/path/to/file")
if let fileData = try? Data(contentsOf: fileURL) {
    print(fileData)
}

4、空数据或固定大小数据

let emptyData = Data()
print(emptyData.isEmpty) // true

let fixedData = Data(repeating: 0, count: 10) // 创建10字节,值全为0
print(fixedData.count) // 10

操作 Data

1、检查属性

字节数:

let data = Data([0x01, 0x02, 0x03])
print(data.count) // 3

是否为空:

let data = Data()
print(data.isEmpty) // true

2、访问字节

使用索引:

let data = Data([0x41, 0x42, 0x43])
print(data[0]) // 65 (ASCII: 'A')

遍历:

for byte in data {
    print(byte)
}

3、追加数据

var data = Data([0x41, 0x42])
data.append(0x43)
print(data) // [65, 66, 67]

4、转换回其他格式

转换为字节数组:

let data = Data([0x01, 0x02, 0x03])
let byteArray = [UInt8](data)
print(byteArray) // [1, 2, 3]

转换为字符串:

let data = Data("Hello".utf8)
if let string = String(data: data, encoding: .utf8) {
    print(string) // "Hello"
}

常见用途

1、文件读写

写入文件:

let data = Data("Hello, file!".utf8)
let fileURL = URL.documentsDirectory.appending(path: "example.txt")
try? data.write(to: fileURL)

从文件读取:

let fileURL = URL.documentsDirectory.appending(path: "example.txt")
if let fileData = try? Data(contentsOf: fileURL) {
    print(fileData)
}

2、网络请求

数据是网络传输的核心格式,例如发送和接收 JSON:

发送数据:

let json = Data("""
    {"key": "value"}
    """.utf8)
    
var request = URLRequest(url: URL(string: "https://example.com")!)
request.httpMethod = "POST"
request.httpBody = json

接收数据:

URLSession.shared.dataTask(with: URL(string: "https://example.com")!) { data, response, error in
    if let data = data {
        print(data)
    }
}.resume()

3、图片处理

import UIKit

if let image = UIImage(named: "example"),
   let imageData = image.jpegData(compressionQuality: 0.8) {
    print(imageData) // 图片的二进制数据
}

重要 API 一览

初始化

init(): 创建空数据。

init(repeating: UInt8, count: Int): 创建重复字节的数据。

init<S>(S) where S : Sequence, S.Element == UInt8: 通过字节序列初始化。

读写

write(to: URL, options: Data.WritingOptions): 写入文件。

init(contentsOf: URL, options: Data.ReadingOptions): 从文件加载。

操作

append(_:): 追加数据。

subdata(in:): 获取数据片段。

base64EncodedString(): 转换为 Base64 字符串。

总结

Data 是处理二进制数据的核心工具,灵活且功能丰富。它在文件操作、网络通信、数据存储和媒体处理等方面发挥了重要作用。在日常开发中,熟练使用 Data 能有效提高编码效率和代码质量。

相关文章

  1. Swift Data类常用方法:https://fangjunyu.com/2024/11/03/swift-data%e7%b1%bb%e5%b8%b8%e7%94%a8%e6%96%b9%e6%b3%95/
  2. Swift为什么使用二进制(Data类型)?:https://fangjunyu.com/2024/10/31/swift-%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%bf%e7%94%a8%e4%ba%8c%e8%bf%9b%e5%88%b6%ef%bc%88data%e7%b1%bb%e5%9e%8b%ef%bc%89%ef%bc%9f/

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注