Http 用Stream传输

IOS Http流传输:全双工管道与二进制流
本文探讨了在IOS中使用Http进行文件传输时,如何利用Stream实现全双工管道传输,以降低内存开销。通过设置Stream的委托并将其加入RunLoop,可以在数据写入时实时处理事件,直至流结束。同时,文章提醒在处理完Stream事件后,务必释放资源并关闭Stream。

了解更多IOS底层原理知识,关注腾讯课堂八点钟学院IOS高级开发 

 IOS学习交流群 431449751;


一般文件传输用Stream, 使用Stream有两种方式,一种是直接把所有数据一次性转化为Stream来传输,第二种是利用全双工管道(底层的创建socketpair,注意阻塞问题)这样对于大数据传输可以减少内存的开销。

第二种:在使用Stream中,代码

outStream和inputStream是全双工管道,其实际操作的是一等价的文件描述符


self.outSteam.delegate =self;

    [self.outSteamscheduleInRunLoop:[NSRunLoopcurrentRunLoop]forMode:NSDefaultRunLoopMode];

    [self.outSteamopen];

open the stream对象之前,向流对象发送scheduleInRunLoop:forMode:消息使其在一个runloop上可以接收到stream events,这样,当流对象不能接收更多数据的时候,可以使delegate避免阻塞。

一旦open the stream,只要delegate持续流对象写入数据,流对象就是一直向其delegate发送stream:handleEvent:消息,直到到达了流的末尾。这些消息中包含一个NSStreamEvent常量参数来指示事件的类型。(如末尾事件是NSStreamEventEndEncountered)


[request setHTTPBodyStream:self.inputStream];

request接管stream代理

注意:在stream:handleEvent:事件中 一定要有self.outSteam.delegate = nil,关闭stream And Stream remove runloop的条件

参考:官方Demo---SimpleURLConnections






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值