当从URL下载文件时,为什么我们要读入字节数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当从URL下载文件时,为什么我们要读入字节数组?相关的知识,希望对你有一定的参考价值。

为什么从URL下载文件时为什么要读入字节数组?在下面的代码中,创建了一个字节数组(“数据”),该数组分配了一个数字“ 1024”,并作为参数传递给下面的代码]

while ((x = in.read(data, 0, 1024)) >= 0)

您能解释一下“读”到字节数组的含义吗?另外,为什么还要传递“ 0”和“ 1024”?

此代码取自Java getting download progress

URL url = new URL("http://downloads.sourceforge.net/project/bitcoin/Bitcoin/blockchain/bitcoin_blockchain_170000.zip");
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection());
long completeFileSize = httpConnection.getContentLength();

java.io.BufferedInputStream in = new java.io.BufferedInputStream(httpConnection.getInputStream());
java.io.FileOutputStream fos = new java.io.FileOutputStream(
        "package.zip");
java.io.BufferedOutputStream bout = new BufferedOutputStream(
        fos, 1024);
byte[] data = new byte[1024];

long downloadedFileSize = 0;
int x = 0;
while ((x = in.read(data, 0, 1024)) >= 0) 
    downloadedFileSize += x;
答案

您能解释一下“读取”到字节数组的含义吗?

当我们将数据读入字节数组时,是指将输入流中的数据存储到数组中以备后用。我们将数据读入字节数组而不是char数组或int数组,因为它是二进制数据。它可能是文本,图片或视频。归根结底,这些都是我们以字节为单位存储的二进制数据。

而且,为什么还要传递“ 0”和“ 1024”?

The documentation for read()表示需要3个参数:

b-目标缓冲区。

off-开始存储字节的偏移量。

len-读取的最大字节数。

因此read()是“偏移量”,读取操作将开始存储字节。 0是要读取的字节数。这些可以是任何有意义的数字,只要您不尝试读取数组末尾以外的位置即可。

以上是关于当从URL下载文件时,为什么我们要读入字节数组?的主要内容,如果未能解决你的问题,请参考以下文章

解压缩文件将文件转换为字节

在Java中将文件读入字节[]数组的优雅方法[重复]

使用字节数组 C++ 时出错

读书笔记--Java核心技术--高级特征

VB如何读取一个图片,保存到字节数组中

在文件下载时返回字节数组或servlet输出流之间是否存在差异?