JavaコードでWGETを使用してファイルをダウンロードしていますが、20 MBのファイルをダウンロードするのに約10分かかります。しかし、wgetをコマンドラインからダウンロードすると、同じファイルが10MbPsの速度で7秒でダウンロードされます。誰がなぜこれが分かっていますか? Javaコードを改善するにはどうすればよいですか?WGETのダウンロードはコマンドラインから実行すると高速になりますが、Javaコードで実行すると遅くなります
以下は、WGETを使用してファイルをダウンロードするために使用したコードです。 20 MBのファイルをダウンロードするのに約10分かかります。しかし、コマンドラインでwgetコマンドを実行すると、数秒で発生します!!
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class WGETServer
{
public File download(URL sourceurl, String username, String password, String fileName)
{
//System.out.println("WGET download() is starting ...");
File file = null;
URLConnection urlConnection = null;
BufferedReader reader = null;
FileOutputStream outputStream = null;
try {
urlConnection = sourceurl.openConnection();
String userNameAndPassword = username +":"+ password;
String encoding = new sun.misc.BASE64Encoder().encode (userNameAndPassword.getBytes());
//The line which is supposed to add authorization data
urlConnection.setRequestProperty ("Authorization", "Basic " + encoding);
reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
}
catch (IOException e) {
System.err.println("Internet connection failure or invalid Username/Password.");
return null;
}
try {
file = new File("file path");
outputStream = new FileOutputStream(file);
int character;
while((character = reader.read()) != -1)
{
outputStream.write(character);
}
outputStream.flush();
outputStream.close();
reader.close();
} catch (IOException e) {
System.err.println(e.getMessage());
return null;
}
System.out.println("downloading completed");
return file;
}
public static void main(String args[]) throws MalformedURLException
{
URL sourceurl = new URL("https:blablabla");
String username = "username";
String password = "password";
String filename = "filename";
WGETServer WGETdownload = new WGETServer();
WGETdownload.download(sourceurl, username, password, filename);
}
}
出力ストリームのバッファリングはありませんか? – Jon