gpt4 book ai didi

java - 给定一个 url 字符串,如何尽快将所有字节读入内存?

转载 作者:行者123 更新时间:2023-12-02 08:01:03 26 4
gpt4 key购买 nike

大家好,给定一个 url 字符串,我想尽快将所有字节(最多指定数量 n)读入内存。

我想知道这个问题的最佳解决方案是什么?

我想出了两种解决方案,但是由于互联网连接永远不会恒定,因此不可能对这些方法进行计时来看看哪个更省时,所以我想>对了,这两个函数中哪一个应该更省时? :

public static int GetBytes(String url, byte[] destination) throws Exception {
//read all bytes (up to destination.length) into destination starting from offset 0
java.io.InputStream input_stream = new java.net.URL(url).openStream();
int total_bytes_read = 0;
int ubound = destination.length - 1;
while (true) {
int data = input_stream.read();
if (data == -1) {
break;
}
destination[total_bytes_read] =(byte) data;
if (total_bytes_read == ubound) {
break;
}
++total_bytes_read;
}
input_stream.close();
return total_bytes_read;
}

public static int GetBytes2(String url, byte[] destination) throws Exception {
//read all bytes (up to destination.length) into destination starting from offset 0
java.io.InputStream input_stream = new java.net.URL(url).openStream();
int total_bytes_read = 0;
while (true) {
int bytes_to_read = destination.length - total_bytes_read;
if (bytes_to_read == 0) {
break;
}
int bytes_read = input_stream.read(destination, total_bytes_read, bytes_to_read);
if (bytes_read == -1) {
break;
}
total_bytes_read += bytes_read;
}
input_stream.close();
return total_bytes_read;
}

测试代码:

public final class Test {

public static void main(String args[]) throws Exception {
String url = "http://en.wikipedia.org/wiki/August_2010_in_sports"; // a really huuge page
byte[] destination = new byte[3000000];
long a = System.nanoTime();
int bytes_read = GetBytes(url, destination);
long b = System.nanoTime();
System.out.println((b - a) / 1000000d);
}
}

我从测试代码中得到的结果是这样的:

GetBytes:

12550.803514
12579.65927
12630.308032
12376.435205
12903.350407
12637.59136
12671.536975
12503.170865

GetBytes2:

12866.636589
12372.011314
12505.079466
12514.486199
12380.704728
19126.36572
12294.946634
12613.454368

基本上,我想知道是否有人知道更好的方法来使用尽可能少的时间将 url 中的所有字节读取到内存中?

最佳答案

我建议您使用JSOUP java HTML 解析器。我使用 JSOUP PARSER 尝试了您给定的 URL 和代码。所花费的时间大约是所花费时间的 1/4。

      long a = System.nanoTime();
Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/August_2010_in_sports").get();
String title = doc.title();
// System.out.println(doc.html()); // will print whole html code
System.out.println(title);
long b = System.nanoTime();
System.out.println( "Time Taken " + (b - a) / 1000000d);

输出:

August 2010 in sports - Wikipedia, the free encyclopedia
Time Taken 3842.634244

试试这个。您需要下载JAR files用于使用 JSOUP。

关于java - 给定一个 url 字符串,如何尽快将所有字节读入内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8889245/

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