bvi*_*dal 12 java android bytearrayoutputstream
在Android应用程序中,我正在发送从中获取的图片,Camera Intent因此我需要将a Bitmap转换为字节数组.要做到这一点,我使用ByteArrayOutputStream如下:
private byte[] getRawImageData(Bitmap source) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] rawImageData = null;
try {
source.compress(CompressFormat.JPEG, DEFAULT_COMRESSION, baos);
rawImageData = baos.toByteArray();
} finally {
try {
baos.close();
} catch (IOException e) {
// handle exception here
}
}
return rawImageData;
}
Run Code Online (Sandbox Code Playgroud)
一切都运行正常,真正的问题是ByteArrayOutputStreamjavadoc与Android 文档之间的差异.
该Javadoc中读取
关闭ByteArrayOutputStream无效.
在Android的文档读取:
关闭此流.这将释放用于此流的系统资源.
我正在关闭流不管什么,但我想知道哪些文档是正确的以及为什么它们是不同的.
ByteArrayOutputStream是一个基于内存的流(由用户在代码中管理和填充),所以当你调用close()它时没有任何影响.清理其内存占用的唯一方法是撤消对该对象的所有引用.届时,垃圾收集器将在未来的任何时间启动并完成其工作以清理此类对象.
然而,当你从事资源,如文件或输入/输出插孔流闭流是必需的(例如OutputStream,InputStream).当您调用close()此类流时,JVM会安全地释放其本地存储/占用内存,并避免任何OutOfMemory问题.
因此,一般情况下,close()在不再需要任何类型的流时调用它是好的(有时是至关重要的),但更重要的是,最好知道我们为什么要调用它.
| 归档时间: |
|
| 查看次数: |
3006 次 |
| 最近记录: |