CFSUpdateMode.ReadOnly, CFSConfiguration.SectorRecycle | CFSConfiguration.EraseFreeSectors); var cfStream = compoundFile.RootStorage.GetStream("SolutionConfiguration"); var byteList = cfStream.GetData CFSUpdateMode.ReadOnly, CFSConfiguration.SectorRecycle | CFSConfiguration.EraseFreeSectors); var cfStream = compoundFile.RootStorage.GetStream("SolutionConfiguration"); var byteList = cfStream.GetData Console.WriteLine(item.Name); var stream = item as CFStream
# CFStream API CFStream API 提供了数据读写的方法,即读写流,使用它可以为内存、文件、网络(使用 socket)的数据建立 stream,我们进行网络请求就是对数据的读写,CFStream
GCDAsyncSocket.m:7596) · Issue #775 · robbiehanson/CocoaAsyncSocket · GitHub[1] Thread 32 name: GCDAsyncSocket-CFStream 存到 NSThread 的私有属性 _private (lldb) po $x0 <NSThread: 0x100f1f9a0>{number = 2, name = GCDAsyncSocket-CFStream NSThreadPerformInfo: 0x100f058e0> 同时,-[NSThread _nq:] 方法会创建 CFRunloopSource 的实例并注册到 GCDAsyncSocket-CFStream 线程 GCDAsyncSocket-CFStream 线程通过 runloop 机制和前面创建的CFRunLoopSource 回调给 __NSThreadPerformPerform 函数 随后 线程销毁 对于第二种情况,我们结合两个线程的执行顺序梳理后如下: A 代表触发 performSelector:onThread: 的线程 B 代表 GCDAsyncSocket-CFStream 线程
在CFStream中的回调方法中,会取theReadQueue最新的一个,在回调方法中取得tag,并将tag传 给回调方法: (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag
输入输出流的创建及绑定: 在这里,我们根据传进来的url,类似ws://localhost:80,进行输入输出流CFStream的创建及绑定。 [图片上传失败... 数据是通过CFStream流的方式回调回来的,每次拿到流数据,都是先放在数据缓冲区中,然后去读当前消息帧的头部,得到当前数据包的大小,然后再去创建消费者对象consumer,去读取缓冲区指定数据包大小的内容 接着我们来看看数据的写: 基本上非常简单,区别于之前CocoaAsyncSocket,读和写都没多少代码,原因是因为CocoaAsyncSocket整篇都用的是CFStream等相对上层的API。
可以查看CoreFoundation框架中的CFStream头文件 ? CFStream头文件C函数方法 AFN中定义的分隔符方法,使用两个十六进制随机数拼接在Boundary后面来表示分隔符 static NSString * AFCreateMultipartFormBoundary
. (#19358) 使用后台轮询器时禁用备份轮询器 (#19454) 清楚地调出侦听端口的行为 (#19529) 在 iOS 上默认启用 CFStream (#19439) 修复 DNS 解析器冷却时间
Various private run loop modes used by CFNetwork for blocking operations_kCFStreamBlockingOpenMode: CFStream 里用来调度网络任务所使用的 private modehttps://opensource.apple.com/source/CF/CF-476.19/CFStream.c.auto.html Mode
API:CFSocekt 用于建立连接,CFStream 用于读写数据。
API:CFSocekt 用于建立连接,CFStream 用于读写数据。 tcp ? UDP ? TCP 的三次握手建立连接 ? TCP 的四次挥手释放连接 ?
上面最重要的就是这个方法: doReadData 上面这个方法后面我们添加的几个标签(开始读取数据 CFStream , 开始读取数据 SSLRead, 开始读取数据普通的形式 等等)都是对这个方法的解释