在我的 Android 应用程序中,我将数据存储在 ByteArrayOutputStream
中(目前最大约为 1 MB),我想将其传递给 DataOutputStream
。
最明显的方法当然是调用:
dataOS.write(byteArrayOS.toByteArray())
但是还有一种更复杂(但可能更有效)的方法:
ByteArrayInputStream rdr = new ByteArrayInputStream(byteArrayOS.toByteArray());
int read;
byte[] buffer = new byte[1024];
while ((read = rdr.read(buffer)) > 0){
dataOS.write(buffer,0,read);
}
将来存储在 ByteArrayOutputStream
中的数据量可能会增长。这两者哪个效率更高?一次写入大量数据还是顺序写入?
更新:
DataOutputStream
用于通过网络写入(它是通过 UrlConnection.getOutputStream()
创建的)。
最佳答案
第一个更有效,因为它不是创建 N 个 1024 字节的 block 并将它们分别发送到 DataOutputStream,而是一次发送整个字节数组。
无论如何,您已经在内存中拥有了整个字节数组。有用的是从不从内存中字节数组(如文件或套接字输入流)读取的流中以 block 的形式读取和写入,因为这样可以避免将整个字节数组放在内存中。
关于java - ByteArrayOutputStream.toByteArray() 还是从流中读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18297694/