0

我知道这个问题对你们大多数人来说可能听起来很基础。我需要从服务器下载一个大文件。该文件的第一行包含一个时间标签。只有当我的时间标签与文件的时间标签不匹配时,我才想下载整个文件。为此,我使用给定的代码。但是,我不确定这是否真的可以防止文件无用地下载整个文件。

请帮帮我!

public String downloadString(String url,String myTime)
{
    try {
           URL url1 = new URL(url);
           URLConnection tc = url1.openConnection();
           tc.setConnectTimeout(timeout);
           tc.setReadTimeout(timeout);
           BufferedReader br = new BufferedReader(new InputStreamReader(tc.getInputStream()));
           StringBuilder sb = new StringBuilder();
           String line;
           while ((line = br.readLine()) != null) {

                    if(line.contains(myTime))
                    {
                        Log.d("TIME CHECK", "Article already updated");
                        break;
                    }
                    sb.append(line+"\n");
                }
                br.close();
                return sb.toString();
        }
    catch(Exception e)
    {
        Log.d("Error","In JSON downloading");
    }

    return null;
}
4

3 回答 3

3

不,没有简单的方法可以精确控制到最后一个字节将下载的内容。即使在 Java 级别,您也涉及 a BufferedReader,它显然会下载比您要求的更多的内容,并对其进行缓冲。还有其他缓冲区,包括您无法控制的操作系统级别。使用 HTTP 仅下载新文件的正确技术是使用IfModifiedSince标头。

于 2012-11-30T09:57:24.830 回答
0

您的代码不会下载整个文件,但由于BufferedReader默认缓冲区大小为 8192,您将至少读取那么多字符。

于 2012-11-30T10:01:00.027 回答
-1

如果它是大小,您可以逐字节或逐块进行

BufferedInputStream in = new BufferedInputStream(url).openStream())
byte data[] = new byte[1024];
int count;
while((count = in.read(data,0,1024)) != -1)
{
    out.write(data, 0, count);
}

请检查这个问题

如何使用 Java 从 Internet 下载和保存文件?

于 2012-11-30T09:58:51.750 回答