Android ndk NDK AAsset_read():建议的缓冲区大小?

Android ndk NDK AAsset_read():建议的缓冲区大小?,android-ndk,android-assets,Android Ndk,Android Assets,只是想知道这里什么是最佳的,因为没有任何建议是在报告中提出的。我相当肯定,虽然bufSize属于size\u t类型,但指定size\u MAX可能不是明智的选择 如果您的文件很小(这是主观的,但对我来说,小文件小于512kb),您可以做的是: AAsset* file = AAssetManager_open(assetManager, "your/file.ext", AASSET_MODE_BUFFER); size_t fileLength = AAsset_getLength(file

只是想知道这里什么是最佳的,因为没有任何建议是在报告中提出的。我相当肯定,虽然
bufSize
属于
size\u t
类型,但指定
size\u MAX
可能不是明智的选择

如果您的文件很小(这是主观的,但对我来说,小文件小于512kb),您可以做的是:

AAsset* file = AAssetManager_open(assetManager, "your/file.ext", AASSET_MODE_BUFFER);
size_t fileLength = AAsset_getLength(file);
char* fileContent = new char[fileLength];
AAsset_read(file, fileContent, fileLength);
在内存分配失败之前,它实际上可以用于更大的文件

如果你打算加载大文件,那么我会读chunck的512kb,但这是主观的,没有硬限制(直到内存分配失败)

如果你的文件很小(这是主观的,但对我来说,小的小于512kb),你可以做的是:

AAsset* file = AAssetManager_open(assetManager, "your/file.ext", AASSET_MODE_BUFFER);
size_t fileLength = AAsset_getLength(file);
char* fileContent = new char[fileLength];
AAsset_read(file, fileContent, fileLength);
在内存分配失败之前,它实际上可以用于更大的文件


如果你打算加载一个大文件,我会读chunck的512kb,但这是主观的,没有硬限制(直到内存分配失败)

是的,有点模糊。。。512kb是我的旧Galaxy S测试手机上的二级缓存大小,可能还有那个时代的其他设备——姜饼,这是我和其他许多人的最低API级别,所以这个数字是有意义的。如果我们知道更多关于在
AAsset_read
的框架下进行本机调用的信息,这也可能有助于得出一个数字。谢谢。我不知道该函数背后的代码,但我在过去几年中处理了很多,最终我的chunck大小为512kb,因为:[1]:测试后,当您在不同线程中一次加载多个文件时,它工作正常(在使用android 4.5的许多设备上测试)[2]:它不会在许多设备上填充二级缓存(如果您在不同线程中读取2-3个或更多文件,您(理想情况下)希望所有块都留在缓存中)@Sister我如何获得assetManager objectSry以获得延迟回复@SumitKumarSaha。如果使用本机活动,则是本机活动的C++ API的一部分。如果您正在使用java活动。只要通过JNI(作为一个JOBJET)将它发送到C++,然后调用:AsAutMaMeSerixFaveJava(Env,JavaJ.JObjtTeOfYouHayAsSeTeMealMeor);是的,有点模糊。。。512kb是我的旧Galaxy S测试手机上的二级缓存大小,可能还有那个时代的其他设备——姜饼,这是我和其他许多人的最低API级别,所以这个数字是有意义的。如果我们知道更多关于在
AAsset_read
的框架下进行本机调用的信息,这也可能有助于得出一个数字。谢谢。我不知道该函数背后的代码,但我在过去几年中处理了很多,最终我的chunck大小为512kb,因为:[1]:测试后,当您在不同线程中一次加载多个文件时,它工作正常(在使用android 4.5的许多设备上测试)[2]:它不会在许多设备上填充二级缓存(如果您在不同线程中读取2-3个或更多文件,您(理想情况下)希望所有块都留在缓存中)@Sister我如何获得assetManager objectSry以获得延迟回复@SumitKumarSaha。如果使用本机活动,则是本机活动的C++ API的一部分。如果您正在使用java活动。只要通过JNI(作为一个JOBJET)将它发送到C++,然后调用:AsAutMaMeSerixFaveJava(Env,JavaJ.JObjtTeOfYouHayAsSeTeMealMeor);