123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- //
- // OSSInputStreamHelper.m
- // AliyunOSSSDK
- //
- // Created by 怀叙 on 2017/12/7.
- // Copyright © 2017年 阿里云. All rights reserved.
- //
- #import "OSSInputStreamHelper.h"
- #import "OSSLog.h"
- #import "aos_crc64.h"
- @interface OSSInputStreamHelper ()
- {
- NSInputStream *_inputStream;
- CFAbsoluteTime _startTime;
- dispatch_semaphore_t _semaphore;
- }
- @end
- @implementation OSSInputStreamHelper
- - (instancetype)initWithFileAtPath:(nonnull NSString *)path
- {
- self = [super init];
- if (self) {
- _crc64 = 0;
- _inputStream = [NSInputStream inputStreamWithFileAtPath:path];
- _semaphore = dispatch_semaphore_create(1);
- }
- return self;
- }
- - (instancetype)initWithURL:(nonnull NSURL *)URL
- {
- self = [super init];
- if (self) {
- _crc64 = 0;
- _inputStream = [NSInputStream inputStreamWithURL:URL];
- _semaphore = dispatch_semaphore_create(1);
- }
- return self;
- }
- - (void)syncReadBuffers
- {
- dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER);
- _startTime = CFAbsoluteTimeGetCurrent();
- [_inputStream open];
- NSInteger length = 1;
- while (length > 0)
- {
- @autoreleasepool{
- uint8_t streamData[1024 * 4];
- length = [_inputStream read:streamData maxLength:1024 * 4];
- if (length > 0) {
- _crc64 = aos_crc64(_crc64, streamData, length);
- }
- }
- }
-
- if (length < 0) {
- OSSLogError(@"there is an error when reading buffer from file!");
- }
- [_inputStream close];
-
- CFAbsoluteTime duration = CFAbsoluteTimeGetCurrent() - _startTime;
- OSSLogDebug(@"read file cost time is :%f",duration);
-
- dispatch_semaphore_signal(_semaphore);
- }
- - (uint64_t)crc64
- {
- return _crc64;
- }
- @end
|