iOS出力I/Oストリーム操作データ
6887 ワード
NSDataによるデータ処理
NSFileHandleによるデータ処理
NSStreamによるデータ処理共有用法
NSString *str = @"<1f8b0808 a1ca7659 0008>";
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSData *firstData = [data subdataWithRange:NSMakeRange(0, 10)];
NSLog(@"%d", [firstData.description isEqualToString:str]);
NSData *lastData = [data subdataWithRange:NSMakeRange(32, data.length - 32)];
NSString *pathstring = [VGSourcePath stringByAppendingString:@"/text.zip"];
[lastData writeToFile:[VGSourcePath stringByAppendingString:@"/text.zip"] options:NSDataWritingAtomic error:nil];
BOOL unarchive = [VGZipArchive unzipFileAtPath:pathstring toDestination:[pathstring stringByDeletingPathExtension] delegate:nil];
NSFileHandleによるデータ処理
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"new" ofType:@"zip"];
NSFileHandle *readFileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *data = [readFileHandle readDataOfLength:10];
NSString *str = @"<1f8b0808 a1ca7659 0008>";
if ([data.description isEqualToString:str]){
[readFileHandle seekToFileOffset:32];
NSData *msgData = [readFileHandle readDataToEndOfFile];
[readFileHandle closeFile];
NSString *pathstring = [VGSourcePath stringByAppendingString:@"/text1.zip"];
NSFileHandle *writeFile = [NSFileHandle fileHandleForWritingAtPath:pathstring];
[writeFile writeData:msgData];
[writeFile closeFile];
BOOL unarchive = [VGZipArchive unzipFileAtPath:pathstring toDestination:[pathstring stringByDeletingPathExtension] delegate:nil];
}
NSStreamによるデータ処理
- (BOOL)copyAndCheckFile:(NSString*)srcPath dest:(NSString*)destPath {
NSInputStream *inputStream = [[NSInputStream alloc] initWithFileAtPath:srcPath];
[inputStream open];
NSInteger offSet = 32;
uint8_t read32 [offSet];
NSInteger bytes = [inputStream read: read32 maxLength:offSet];
if (bytes < offSet) {
[inputStream close];
return NO;
}
uint8_t zipAry[10];
//1f8b0808 a1ca7659 0008
zipAry[0] = (uint8_t)0x1f;
zipAry[1] = (uint8_t)0x8b;
zipAry[2] = (uint8_t)0x08;
zipAry[3] = (uint8_t)0x08;
zipAry[4] = (uint8_t)0xa1;
zipAry[5] = (uint8_t)0xca;
zipAry[6] = (uint8_t)0x76;
zipAry[7] = (uint8_t)0x59;
zipAry[8] = (uint8_t)0x00;
zipAry[9] = (uint8_t)0x08;
//NSLog(@"===> txt2:%s", &zipAry[0]);
for (int i = 0;i < 10; i++) {
if (zipAry[i] != read32[i]) {
[inputStream close];
return NO;
}
}
NSOutputStream *outStream = [[NSOutputStream alloc] initToFileAtPath:destPath append:NO];
[outStream open];
NSInteger maxLength = 1024*4;
uint8_t readBuffer [maxLength];
while (YES) {
NSInteger bytesRead = [inputStream read: readBuffer maxLength:maxLength];
if (bytesRead > 0) {
[outStream write:readBuffer maxLength:bytesRead];
}
else{
break;
}
}
[inputStream close];
[outStream close];
return YES;
}
- (void)copyFile:(NSString*)srcPath offset:(int)offset dest:(NSString*)destPath{
NSInputStream *inputStream = [[NSInputStream alloc] initWithFileAtPath:srcPath];
NSOutputStream *outStream = [[NSOutputStream alloc] initToFileAtPath:destPath append:NO];
[inputStream open];
[outStream open];
NSInteger maxLength = 1024*4;
uint8_t readBuffer [maxLength];
int pos = 0;
while (YES) {
NSInteger bytesRead = [inputStream read: readBuffer maxLength:maxLength];
if (bytesRead > 0) {
if (offset > 0 && pos < offset) {
if (pos + bytesRead <= offset) {
pos += bytesRead;
continue;
}
else{
int left = offset - pos;
uint8_t readBuffer2 [bytesRead - left];
for (int i = 0; i < bytesRead - left; i++) {
readBuffer2[i] = readBuffer[i + left];
}
[outStream write:readBuffer2 maxLength:bytesRead - left];
pos += bytesRead;
}
}
else{
[outStream write:readBuffer maxLength:bytesRead];
}
}
else{
break;
}
}
[inputStream close];
[outStream close];
}