我正在尝试从我的原生代码中读取一个简单的文本文件。
在我的活动中,我正在创建资产管理器:assetManager = getAssets();
然后我将assetManager传递给我的本机方法(如原生音频示例中所示):
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
AAsset* asset = AAssetManager_open(mgr, "file.txt", AASSET_MODE_UNKNOWN);
AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
off_t start, length;
int fd = AAsset_openFileDescriptor(asset, &start, &length);
问题是fd
小于0 !!!
有人可以为此提供帮助吗?
答案 0 :(得分:5)
AAsset_openFileDescriptor
仅适用于未压缩的文件(如mp3,jpg,png等)。它写在文档(asset_manager.h头文件)中:
/**
* Open a new file descriptor that can be used to read the asset data.
*
* Returns < 0 if direct fd access is not possible (for example, if the asset is
* compressed).
*/
int AAsset_openFileDescriptor(AAsset* asset, off_t* outStart, off_t* outLength);
使用AAsset_read
或AAsset_getBuffer
。