Android BitmapFactory 与 BufferedInputStream
Android BitmapFactory vs. BufferedInputStream
BitmapFactory.decodeStream(InputStream)
是否已经读取了大量的数据块,或者是否应该确保将 BufferedInputStream
而不是原始的 InputStream
传递给它?
我问好像 BitmapFactory
还没有在相当大的块中执行 IO,那么应该在传递输入流之前清楚地对其应用缓冲。但是,如果它已经在大块中工作,那么应用缓冲实际上只是添加一组不必要的 memcpy()
操作。
如果那些编写采用 InputStream
或 OutputStream
参数的 API 的人在 Javadoc 中清楚地说明了这些事情,那就太好了。
目前,我正在应用缓冲,除非 InputStream
是 AssetManager.AssetInputStream
的一个实例,因为我注意到在 decodeStream()
.
下对这种情况的特殊处理
如果您查看实现,就会发现 decodeStream 可能会调用两种方法。
nativeDecodeAsset(),当我查看 class
时,它似乎没有显示实现
decodeStreamInternal(),根据DECODE_BUFFER_SIZE
的大小,一次读取16 * 1024
字节
(id post 代码,但格式现在似乎已损坏)
所以我认为使用 BitmapFactory.decodeStream()
是一个安全的选择
BitmapFactory.decodeStream(InputStream)
是否已经读取了大量的数据块,或者是否应该确保将 BufferedInputStream
而不是原始的 InputStream
传递给它?
我问好像 BitmapFactory
还没有在相当大的块中执行 IO,那么应该在传递输入流之前清楚地对其应用缓冲。但是,如果它已经在大块中工作,那么应用缓冲实际上只是添加一组不必要的 memcpy()
操作。
如果那些编写采用 InputStream
或 OutputStream
参数的 API 的人在 Javadoc 中清楚地说明了这些事情,那就太好了。
目前,我正在应用缓冲,除非 InputStream
是 AssetManager.AssetInputStream
的一个实例,因为我注意到在 decodeStream()
.
如果您查看实现,就会发现 decodeStream 可能会调用两种方法。
nativeDecodeAsset(),当我查看 class
时,它似乎没有显示实现
decodeStreamInternal(),根据
的大小,一次读取DECODE_BUFFER_SIZE
16 * 1024
字节(id post 代码,但格式现在似乎已损坏)
所以我认为使用 BitmapFactory.decodeStream()
是一个安全的选择