Вы можете адаптировать в этом примере для работы с "буферным" режимом AAssetManager
.
Однако это будет считывать весь актив в память. Вы могли бы сделать реализацию, которая работает больше как std::fstream
, читая куски в буфер памяти, но это значительно сложнее.
Примечание: я только тестировал скомпилированный код ниже.
class asset_streambuf : public std::streambuf {
public:
asset_streambuf(AAsset * the_asset)
: the_asset_(the_asset) {
char * begin = (char *)AAsset_getBuffer(the_asset);
char * end = begin + AAsset_getLength64(the_asset);
setg(begin, begin, end);
}
~asset_streambuf() {
AAsset_close(the_asset_);
}
private:
AAsset * the_asset_;
};
Использование:
AAsset * asset = AAssetManager_open(mgr, "some_asset.bin", AASSET_MODE_BUFFER);
asset_streambuf sb(asset);
std::istream is(&sb);
РЕДАКТИРОВАТЬ: Найден более короткий путь на основе этот ответ .