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;
}