0

以下の方法を使用して大きなファイルをマッピングできませんでした。

NSData *mappedData = [NSData dataWithContentsOfFile:self.videoPath options:NSDataReadingMappedAlways error:&error];

またはマップ:

int fd = open([path fileSystemRepresentation], O_RDONLY);
struct stat statbuf;
if (fstat(fd, &statbuf) == -1) {
    close(fd);
    return nil;
}

void *mappedFile;
mappedFile = mmap(0, statbuf.st_size, PROT_READ, MAP_FILE|MAP_SHARED, fd, 0);
close(fd);
if (mappedFile == MAP_FAILED) {
    NSLog(@"Map failed, errno=%d, %s", errno, strerror(errno));
    return nil;
}

// Create the NSData
NSData *mappedData = [NSData dataWithBytesNoCopy:mappedFile length:statbuf.st_size freeWhenDone:NO];`

メモリ マッピングに失敗しました。mappedData はファイル全体を RAM にロードします。

なぜ失敗したのですか?他の提案はありますか?

4

1 に答える 1