bool FileLoader::read(){auto block = MNNMemoryAllocAlign(gCacheSize, MNN_MEMORY_ALIGN_DEFAULT);if (nullptr == block){MNN_PRINT("Memory Alloc Failed\n");return false;}auto size = fread(block, 1, gCacheSize, mFile);mTotalSize = size;mBlocks.push_back(std::make_pair(size, block));while (size == gCacheSize){block = MNNMemoryAllocAlign(gCacheSize, MNN_MEMORY_ALIGN_DEFAULT);if (nullptr == block){MNN_PRINT("Memory Alloc Failed\n");return false;}size = fread(block, 1, gCacheSize, mFile);if (size > gCacheSize){MNN_PRINT("Read file Error\n");MNNMemoryFreeAlign(block);return false;}mTotalSize += size;mBlocks.push_back(std::make_pair(size, block));}if (ferror(mFile)){return false;}return true;}
FileLoader按块读取文件,将每块的大小及指针保存在mBlocks中。
bool FileLoader::merge(AutoStorage<uint8_t> &buffer){buffer.reset((int)mTotalSize);if (buffer.get() == nullptr){MNN_PRINT("Memory Alloc Failed\n");return false;}auto dst = buffer.get();int offset = 0;for (auto iter : mBlocks){::memcpy(dst + offset, iter.second, iter.first);offset += iter.first;}return true;}
AutoStorage
