Files
featherVoice/Pods/AliyunOSSiOS/AliyunOSSSDK/OSSInputStreamHelper.m
2025-08-08 10:49:36 +08:00

81 lines
1.7 KiB
Objective-C

//
// 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