NSInputStream、NSOutputStream实现文件的拷贝

NSInputStream、NSOutputStream实现文件的拷贝

NSString *inPath = @"/Users/yuanbinhuang/Documents/2.机器学习/(07)工作流程与模型调优/(7)工作流程与模型调优.avi";
    NSInputStream *inputStream = [[NSInputStream alloc] initWithFileAtPath:inPath];
    inputStream.delegate = self;
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
    [inputStream open];
    // 开始时间
    _startTime = CFAbsoluteTimeGetCurrent();

    NSString *toPath = @"/Users/yuanbinhuang/Desktop/video/aaa.avi";
    _outputStream = [[NSOutputStream alloc] initToFileAtPath:toPath append:YES];
    [_outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
    [_outputStream open];

实现代理方法


- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
    
    NSInputStream * input = nil;
    
    if ([aStream isKindOfClass:[NSInputStream class]]) {
        input = (NSInputStream *)aStream;
    }
    
    switch (eventCode) {
        case NSStreamEventHasBytesAvailable:
            {
                long maxLen = 64 * 1024 * 8;
                uint8_t streamData[maxLen];
                
                NSUInteger length = [input read:streamData maxLength:maxLen];
                
                if (length) {
                    NSData *data = [NSData dataWithBytes:streamData length:length];
                    NSLog(@"数据长度 --- %lu",(unsigned long)data.length);
                    [_outputStream write:data.bytes maxLength:maxLen];
                } else {
                    NSLog(@"没有数据 -- %@",[NSDate date]);
                }
            }
            break;
        case NSStreamEventErrorOccurred:{
            NSLog(@"进行异常处理");
        }
            break;
        case NSStreamEventEndEncountered: {
            //输入流关闭处理
            [input close];
            //从运行循环中移除
            [input removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
            //置为空
            input = nil;
            
            CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - _startTime);
            NSLog(@"Linked in %f ms", linkTime * 1000.0);
        }
            break;
        default:
            break;
    }
    
}

你可能感兴趣的:(NSInputStream、NSOutputStream实现文件的拷贝)