gpt4 book ai didi

java - 在 Android 应用程序中关闭 ByteArrayOutputStream

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:21 26 4
gpt4 key购买 nike

在 Android 应用程序中,我正在发送从 Camera Intent 拍摄的照片,因此我需要将 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;
}

一切正常,真正的问题是 javadoc 和 Android 文档之间 ByteArrayOutputStream 文档的区别。

Javadoc阅读

Closing a ByteArrayOutputStream has no effect.

Android doc阅读:

Closes this stream. This releases system resources used for this stream.

无论如何我都会关闭流,但我想知道哪个文档是正确的以及它们为何不同。

最佳答案

ByteArrayOutputStream 是一个基于内存的流(由用户在代码中管理和填充),因此当您对其调用 close() 时没有任何效果。清除其内存占用的唯一方法是撤销对该对象的所有引用。到那时,垃圾收集器将在未来的任何时间启动并完成清理此类对象的工作。

但是,当您使用文件或输入/输出套接字流(例如 OutputStreamInputStream)等资源时,需要关闭流。当您在此类流上调用 close() 时,JVM 会安全地释放它们的本地存储/占用内存并避免任何 OutOfMemory 问题。

所以一般来说,当不再需要任何类型的流时调用 close() 是好的(有时是重要的),但更重要的是,最好知道为什么应该我们打电话。

关于java - 在 Android 应用程序中关闭 ByteArrayOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15381952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com