Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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中获取readBytes的进度_Java_Android_Inputstream - Fatal编程技术网

Java 在android中获取readBytes的进度

Java 在android中获取readBytes的进度,java,android,inputstream,Java,Android,Inputstream,我已经看过了 我正在使用以下代码从internet下载文件: try { InputStream is = new URL(pdfUrl).openStream(); byte[] pdfData = readBytes(is); return pdfData; } catch (IOException e) { e.printStackTrace(); return null; } public byte[] readBytes(InputStre

我已经看过了

我正在使用以下代码从internet下载文件:

try {
    InputStream is = new URL(pdfUrl).openStream();
    byte[] pdfData = readBytes(is);
    return pdfData;
} catch (IOException e) {
    e.printStackTrace();
    return null;
}

public byte[] readBytes(InputStream inputStream) throws IOException {

    ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];

    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) {
        byteBuffer.write(buffer, 0, len);
    }

    return byteBuffer.toByteArray();
}
有什么方法可以让我知道下载文件的进度吗

我看到的答案是使用
while
循环,但我不知道在这种情况下如何使用它。

编辑:

我在AsyncTask中使用此选项:

protected byte[] doInBackground(String... url) {
        pdfUrl = url[0];

        try {
            InputStream is = new URL(pdfUrl).openStream();
            DownloadBytes downloadData = readBytes(is);
            byte[] pdfData = downloadData.getBytes();
            progress = downloadData.getProgress();
            return pdfData;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
}

如何在此方法中调整
publishProgress()

这将在您的
readBytes()
实现中进行,您的问题没有显示。如果您切换到更现代的HTTP客户端API,您可以使用带有OkHttp的拦截器来监视下载进度。@Commonware抱歉,我错过了,我已经更新了问题并添加了
readBytes()
Um的代码,您已经有了
while
循环。它位于
readBytes()
方法中。在这里,您可以跟踪您阅读了多少内容,并且可以使用第一个链接到的问题的答案中显示的
getContentLength()
方法来确定总下载量。@commonware请检查我更新的问题。我想知道如何使用
publishProgress()
?嗯,如果
readBytes()
是一个
AsyncTask
,您可以将某种
DownloadEvent
发布到
publishProgress()
,其中每个事件都有要下载的总字节数以及到目前为止下载的总字节数。然后,您的
onProgressUpdate()
将使用该信息更新您的UI。这将出现在您的
readBytes()
实现中,您的问题没有显示出来。如果您切换到更现代的HTTP客户端API,您可以使用带有OkHttp的拦截器来监视下载进度。@Commonware抱歉,我错过了,我已经更新了问题并添加了
readBytes()
Um的代码,您已经有了
while
循环。它位于
readBytes()
方法中。在这里,您可以跟踪您阅读了多少内容,并且可以使用第一个链接到的问题的答案中显示的
getContentLength()
方法来确定总下载量。@commonware请检查我更新的问题。我想知道如何使用
publishProgress()
?嗯,如果
readBytes()
是一个
AsyncTask
,您可以将某种
DownloadEvent
发布到
publishProgress()
,其中每个事件都有要下载的总字节数以及到目前为止下载的总字节数。然后,您的
onProgressUpdate()
将使用该信息更新您的UI。