Java.net从联机解析html时,哪一个速度最快?

Java.net从联机解析html时,哪一个速度最快?,java,io,Java,Io,使用java.net、java.io,从联机解析html并将其加载到文件或控制台的最快方法是什么?缓冲写入程序/缓冲读取器是否比inputstreamreader/outputstreamwriter快?编写器和读取器是否比输出流和输入流更快? 我遇到以下输出写入程序/流的严重延迟: URLConnection ii; BufferedReader iik = new BufferedReader(new InputStreamReader(ii.getInputStream())); Str

使用java.net、java.io,从联机解析html并将其加载到文件或控制台的最快方法是什么?缓冲写入程序/缓冲读取器是否比inputstreamreader/outputstreamwriter快?编写器和读取器是否比输出流和输入流更快?
我遇到以下输出写入程序/流的严重延迟:

URLConnection ii;
BufferedReader iik = new BufferedReader(new InputStreamReader(ii.getInputStream()));

String op;

while(iik.readLine()!=null) {
    op=iik.readLine();
    System.out.println(op);
}   
但奇怪的是,我在使用以下代码时几乎没有延迟:

URLConnection ii=i.openConnection();
Reader xh=new InputStreamReader(ii.getInputStream());

int r;
Writer xy=new PrintWriter(System.out);

while((r=xh.read())!=-1) {
    xy.write(r);
}  

xh.close();
xy.close();

这里发生了什么?

您的第一个代码段是错误的:它读取下一行,测试它是否为空,忽略它,然后读取下一行而不测试它是否为空,然后打印它

第二个代码打印从读取器读取的每个字符的整数值

这两个代码段使用相同的底层流和读取器,如果编码正确,由于缓冲,第一个代码段可能会快一点。但当然,只有当线路结束时,才会在屏幕上打印某些内容。如果服务器发送一行10Mbs的文本,在将内容打印到屏幕之前,您必须读取整个10Mbs


确保在finally块中关闭读卡器。

读卡器/写卡器本身不应比输入/输出流快

也就是说,通过
readLine()
println()
可能不是传输字节的最佳方式。在您的情况下,如果正在加载的文件不包含许多换行符,则在readLine()返回之前,BufferedReader必须缓冲大量数据

在流之间传输数据的标准非可怕方式是使用缓冲区分块传输数据:

byte[] buf = new byte[1<<12];
InputStream in = urlConnection.getInputStream();
int read = -1;

while ((read = in.read(buf) != -1) {
    System.out.write(buf, 0, read);
}

byte[]buf=new byte[1您的代码不完整,在第一个场景中如何初始化
ii
?这可能会解释为什么第一个示例(用两个nextline调用编码)需要花费很长时间。非常感谢。感谢这个字节数组示例。博客链接上的代码片段也会更快。