Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android应用程序中关闭ByteArrayOutputStream_Java_Android_Bytearrayoutputstream - Fatal编程技术网

Java 在Android应用程序中关闭ByteArrayOutputStream

Java 在Android应用程序中关闭ByteArrayOutputStream,java,android,bytearrayoutputstream,Java,Android,Bytearrayoutputstream,在Android应用程序中,我正在发送一张从相机拍摄的照片,因此我需要将位图转换为字节数组。为此,我使用一个ByteArrayOutputStream,如下所示: private byte[] getRawImageData(Bitmap source) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] rawImageData = null; try { source.c

在Android应用程序中,我正在发送一张从
相机拍摄的照片,因此我需要将
位图
转换为字节数组。为此,我使用一个
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
文档的差异

上面写着

关闭ByteArrayOutputStream无效

草案内容如下:

关闭此流。这将释放用于此流的系统资源


我正在关闭流,不管是什么,但我想知道哪些文档是正确的,以及它们为什么不同。

这是ByteArrayOutputStrem.close的实现

public void close() throws IOException {
}
API说关闭ByteArrayOutputStream没有效果


因此,省略close()是安全的,另一方面,它不会造成伤害,JVM无论如何都会跳过对空方法的调用。它可以用来避免警告资源未关闭。

关闭流不会造成任何伤害,但不关闭流可能会造成伤害。
因此最好将其关闭。

ByteArrayOutputStream
是一个基于内存的流(由代码中的用户管理和填充),因此对其调用
close()
时没有效果。清除其内存足迹的唯一方法是取消对该对象的所有引用。到那时,垃圾收集器将在不久的将来随时启动,并完成清理此类对象的工作

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


因此,一般来说,在不再需要时对任何类型的流调用
close()
都是好的(有时是至关重要的),但更重要的是,最好知道我们为什么要调用它。

第一个和第二个是正确的,取决于outputstrem实现,关闭一个bao,什么都不做。但是,始终关闭流是一种很好的做法,无论它们来自何处您是否担心字节数组下面的流会发生什么情况,当调用
close
时?@epoch但问题是:当流什么都不做时,为什么需要关闭它?@Perception我不认为底层字节数组发生了什么是问题,因为流对象一旦超出范围就会被GCed。@bvidal-那么你的问题就是好奇?在任何情况下,第一份文件都是正确的,在BAS上的
关闭操作是不可操作的。正如前面所述,您目前正在做的,您应该关闭它。