gpt4 book ai didi

java - Android 部分下载的文件报告错误的文件大小

转载 作者:行者123 更新时间:2023-11-30 11:29:16 26 4
gpt4 key购买 nike

我正在整理一些代码以从 Android 中的 HTTP 地址下载文件。如果中途下载失败,我想支持下载恢复。

我在开始下载时得到的输出如下:

起始大小为 0停止尺寸 12333416起始尺码 12333416停止大小 16058200起始尺码 3724784

我不明白为什么在第一次恢复后,部分下载文件的后续文件大小读数不匹配。

提前致谢!

public void download(String source, String target) throws IOException {
BufferedOutputStream outputStream = null;
InputStream inputStream = null;

try {
File targetFile = new File(target);
currentBytes = targetFile.length();

Log.i(TAG, "Start size " + String.valueOf(currentBytes));
outputStream = new BufferedOutputStream(new FileOutputStream(targetFile));

// create the input stream
URLConnection connection = (new URL(source)).openConnection();
connection.setConnectTimeout(mCoTimeout);
connection.setReadTimeout(mSoTimeout);

inputStream = connection.getInputStream();
inputStream.skip(currentBytes);

// calculate the total bytes
totalBytes = connection.getContentLength();

byte[] buffer = new byte[1024];
int bytesRead;

while ((bytesRead = inputStream.read(buffer)) > 0) {
// write the bytes to file
outputStream.write(buffer, 0, bytesRead);
outputStream.flush();

currentBytes += bytesRead;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
// close the output stream
outputStream.flush();
outputStream.close();
}

if (inputStream != null) {
// close the input stream
inputStream.close();
}

Log.i(TAG, "Stop size " + String.valueOf(currentBytes));
}
}

最佳答案

你做错了两件事:

  1. 要恢复下载到文件,您应该附加而不是重写文件。为输出流使用特殊的构造函数:

    FileOutputStream(targetFile, true)

  2. 要从服务器请求部分文件,您应该使用 HTTP 1.1 属性“Range”。你可以这样做:

    HttpURLConnection httpConnection = (HttpURLConnection) 连接;connection.setRequestProperty("Range", "bytes="+ currentBytes + "-");

关于java - Android 部分下载的文件报告错误的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450387/

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