Swift 算法剖析:如何保证分块解析 Data 不发生数据割裂?(下)
概述
宝子们都知道,在 iOS 中读取大尺寸文件会导致无法接受的明显卡顿,即使在后台线程中也无济于事。
在上面的示意图中,我们试图从文本文件中解析超过 3w 条成语记录,可以看到基本没有延迟。这是怎么做到的呢?
在本篇博文中,您将学到如下内容:
- 概述
- 3. 扩展 URL,借力更自如!
- 4. 疑云重重
- 5. 拨云见日:不再迷茫
-
- 5.1 ✅ 解决方案:使用 leftover 缓冲机制
- 5.2 ✅ 举个例子说明
- 5.3 ⚠️ 注意点
- 总结
相信学完本课后,小伙伴们不仅知道如何优化大文件的读取,还会彻底搞懂其算法上的一个潜在“漏洞”,可谓一箭双雕、一石二鸟之计,怎能让人不爱呢?
闲言少叙,让我们马上开始“算法找茬”大冒险吧!
Let‘s go!!!😉
3. 扩展 URL,借力更自如!
因为大家是通过文件的 URL 读取其内容的,所幸我们干脆为其做一个扩展方法专注于分块读取功能:
extension URL {func makeSplitAsyncStream(separator: String,encoding: String.Encoding) throws -> AsyncThrowingStream<String, Error> {guard let inputStream = InputStream(url: self) else {throw NSError(domain: "Invalid file URL", code: -1)}inputStream.open()let bufferSize = 4096let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity