NSInputStream

2016-12-08  本文已影响926人  wrlynxayy

1.NSInputStream文件的读取流,是将本地的文件读取到内存中去

@property(nonatomic)NSInputStream*inputStream;

// ①文件读取流的开启  path为需要被读取的文件路径  

self.inputStream= [[NSInputStreamalloc]initWithFileAtPath:path];

[self.inputStreamsetDelegate:self];

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

[self.inputStreamopen];

// ②在开启了文件流以后就会在代理方法中执行读取操作

#define HBUFC_BUFFER_SIZE1024  //一次最大读取的字节

uint8_thbufc_file_buffer[HBUFC_BUFFER_SIZE]; // 一个缓存的数组

-(void)stream:(NSStream*)stream handleEvent:(NSStreamEvent)eventCode{

switch(eventCode) {

// 有有效读取字节的时候进入这个case,一次性将所有的流进入

caseNSStreamEventHasBytesAvailable:{

// 将HBUFC_BUFFER_SIZE 大小的字节流放入到缓存数组hbufc_file_buffer中

longbytes = [(NSInputStream*)streamread:hbufc_file_buffermaxLength:HBUFC_BUFFER_SIZE];

// 进行循环的读取,注意每次data取的是读取到的字节数 而不是最大字节数即bytes

while(bytes >0) {

NSData*data = [NSDatadataWithBytes:hbufc_file_bufferlength:bytes];

[self.dataappendData:data];

bytes = [(NSInputStream*)streamread:hbufc_file_buffermaxLength:HBUFC_BUFFER_SIZE];

}

}

break;

// 流读取完毕后,进入这个case 将流关闭,并且从runloop中移除

caseNSStreamEventEndEncountered:{

NSString*dataStr = [[NSStringalloc]initWithData:self.dataencoding:(NSUTF8StringEncoding)];

NSLog(@"%@===",dataStr);

[streamclose];

[streamremoveFromRunLoop:[NSRunLoopcurrentRunLoop]forMode:NSDefaultRunLoopMode];

stream =nil;

}

break;

default:

break;

}

上一篇 下一篇

猜你喜欢

热点阅读