【发布时间】:2013-03-13 09:56:10
【问题描述】:
在一个 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;
}
一切正常,真正的问题是 ByteArrayOutputStream 的文档在 javadoc 和 Android 文档之间的区别。
Javadoc 读取
关闭 ByteArrayOutputStream 无效。
Android doc 写着:
关闭此流。这会释放用于该流的系统资源。
无论如何我都会关闭信息流,但我想知道哪些文档是正确的以及它们为何不同。
【问题讨论】:
-
第一个和第二个是正确的,取决于 outputstrem 的实现,关闭一个 baos,什么都不做。但是,无论流来自何处,始终关闭流是一种好习惯
-
当
close被调用时,您是否担心底层字节数组的流会发生什么? -
@epoch 但问题是:为什么它什么都不做时需要关闭这个流?
-
@Perception 我认为底层字节数组发生的事情不是问题,因为一旦超出范围,流对象就会被 GC。
-
@bvidal - 那么你的问题只是单纯的好奇?无论如何,第一个文档是正确的,BAOS 上的
close操作是无操作的。如前所述,您目前正在这样做,无论如何都应该关闭它。
标签: java android bytearrayoutputstream