gpt4 book ai didi

java - WGET 下载在通过命令行执行时发生得更快,而在通过 Java 代码执行时发生得慢

转载 作者:行者123 更新时间:2023-11-29 08:07:53 25 4
gpt4 key购买 nike

我正在通过 java 代码使用 WGET 下载文件,下载 20 MB 文件大约需要 10 分钟。但是在通过命令行执行 wget 下载时,同一文件以 10MbPs 的速度在 7 秒内完成下载。有人知道为什么吗?如何改进我的 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);
}

最佳答案

用 BufferedOutputStream 包装 FileOutputStream。

new BufferedOutputStream(new FileOutputStream(...))

否则,底层操作系统会将写入的每个字符同步到磁盘,这是一个耗时的过程。这就是缓冲如此重要的原因。

关于java - WGET 下载在通过命令行执行时发生得更快,而在通过 Java 代码执行时发生得慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9922758/

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