gpt4 book ai didi

java - DataOutputStream写入进度不准确

转载 作者:行者123 更新时间:2023-12-01 18:32:45 24 4
gpt4 key购买 nike

DataOutputStream wr = new DataOutputStream(
urlConnection.getOutputStream());
fis = new FileInputStream(image_path);
int total = 0;
int bytes_read = 0;
int buffer_size = 1024;
byte[] buffer = new byte[buffer_size];
bytes_read = fis.read(buffer, 0, buffer_size);
int progress = 0;
while (bytes_read > 0) {
total += bytes_read;
wr.write(buffer, 0, bytes_read);
int bytes_available = fis.available();
progress = (int) ((total * 100) / bytes.length);
Log.i("asd", "direct progress: " + progress);
buffer_size = Math.min(bytes_available, buffer_size);
buffer = new byte[buffer_size];
bytes_read = fis.read(buffer, 0, buffer_size);
}
Log.i("asd", "data written to target so far is: " + wr.size()+ " file length: "+bytes.length);
wr.flush();
wr.close();

将文件完整上传到服务器上。但我的目的是获取已上传字节的进度。我也能得到这个(我认为这是不准确的)。当我运行此代码时,它显示从 0 到 100 的进度,但文件会在 1 分钟左右后上传到服务器。

我尝试过小于 1MB 的文件,进度准确。但是当文件较大时,我会遇到进度不准确的问题。

最佳答案

您的进度指示器不准确,因为您将(读取的字节数)除以(一次读取中读取的字节数)。这意味着您将读取次数显示为上传百分比,这是不正确的,并且仅适用于以 100 次读取/写入的方式上传的文件。

您应该在开始时读取一次文件长度。然后累计读/写的总字节数。那么进度等于:

进度 = 100 * 写入的总字节数/文件长度

DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
fis = new FileInputStream(image_path);
int fileLength = new File(image_path).length();

int bytes_read = 0;
int bytesReadTotal = 0;
int buffer_size = 1024;
byte[] buffer = new byte[buffer_size];
int progress = 0;

while ((bytes_read = fis.read(buffer, 0, buffer_size)) > 0) {
wr.write(buffer, 0, bytes_read);
bytesReadTotal += bytes_read;
progress = (int) (100.0f * bytesReadTotal / fileLength);
Log.i("asd", "direct progress: " + progress);
}
Log.i("asd", "data written to target so far is: " + wr.size()+ " file length: "+bytes.length);
wr.flush();
wr.close();

您也不必每次想要读/写某些内容时都重新创建缓冲区。您可以重复使用旧的。

关于java - DataOutputStream写入进度不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23388175/

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