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 レベルでもBufferedReader. OSレベルなど、制御できない他のバッファもあります。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を使用してインターネットからファイルをダウンロードして保存する方法は?

于 2012-11-30T09:58:51.750 に答える