我在写关于获取目标网页HTML代码的时候,用url.openConnection().getInputStream()得到了一个网页的输入流(in),然后问题就来了,当我用InputStreamReader来读取它的时候,一切正常,而用in.available()获得in的大小后整个读取,却不能得到正确的大小,从而导致获得的网页只有前2K左右的HTML代码。不知道这是什么问题。
虽然第一中方法可行,但是他的效率太低,我不知道怎么把InputStreamReader整个读取到一个变量,只能逐CHAR读取,用BufferedReader也只能逐行读取,遇到处理大量网页时,速度实在太慢,不知道有什么方法能快速获得一个网页的全部HTML代码。出问题的InputStream大小:import java.io.*;
import java.net.*;public class GetHtml2 { public static void main(String[] arg) throws IOException{
InputStream in = null;
//String html = "";
try{
URL this_url = new URL("http://www.cellularfactory.com/");
in = this_url.openConnection().getInputStream();
int availableLength = in.available();
byte[] totalBytes = new byte[availableLength];
in.read(totalBytes);
// String htmlsource = new String(totalBytes);
System.out.println("Length of html is " + availableLength);
// System.out.println(htmlsource);
}
finally{
if(in!=null)
in.close();
}
}
}//运行以上代码,获得的HTML大小只有2K左右,有时候甚至大小还会变化
虽然第一中方法可行,但是他的效率太低,我不知道怎么把InputStreamReader整个读取到一个变量,只能逐CHAR读取,用BufferedReader也只能逐行读取,遇到处理大量网页时,速度实在太慢,不知道有什么方法能快速获得一个网页的全部HTML代码。出问题的InputStream大小:import java.io.*;
import java.net.*;public class GetHtml2 { public static void main(String[] arg) throws IOException{
InputStream in = null;
//String html = "";
try{
URL this_url = new URL("http://www.cellularfactory.com/");
in = this_url.openConnection().getInputStream();
int availableLength = in.available();
byte[] totalBytes = new byte[availableLength];
in.read(totalBytes);
// String htmlsource = new String(totalBytes);
System.out.println("Length of html is " + availableLength);
// System.out.println(htmlsource);
}
finally{
if(in!=null)
in.close();
}
}
}//运行以上代码,获得的HTML大小只有2K左右,有时候甚至大小还会变化
解决方案 »
- 初学到 IO,不是很理解,求解!
- List中的数据如何根据对象的某个字段排序
- UnsupportedClassVersionError问题;答完结贴;
- 怎么用AWT或SWING实现google搜索框功能
- jtable 排序问题
- 新手:GregorianCalendar同Calendar有什么不同啊,一般情况下应该用哪个啊?
- 一个关于JTree的问题,找不出原因,还望大家帮忙.
- 请问将jtree进行拖动处理时,怎样使拖动时鼠标变成其他的样子
- JLabel可以自动换行吗?
- 谁有jswdk-1.0.1? 请给我, 一定给分。急!
- String的基础问题
- ★有没有人知道哪有《JDK1.5的新特性》这本书的PDF?★
int BUFFER_SIZE = 1024 * 10;byte[] bytes = new byte[BUFFER_SIZE];
int length = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((length = in.read(bytes)) >= 0)
{
baos.write(bytes, 0, length);
}
// 得到整个页面
byte[] totalBytes = baos.toByteArray();
is = new BufferedInputStream(new URL(this.url).openStream());
os = new FileOutputStream(fileName);
int bytesRead = 0;
byte[] buffer = new byte[1024 * 8];
while ((bytesRead = is.read(buffer, 0, 1024 * 8)) != -1) {
os.write(buffer, 0, bytesRead);
}
is.close();
os.close();
} catch (Exception e) {
new File(fileName).deleteOnExit();
System.out.println("Warning! " + e.getMessage() + "\n" + this.url
+ " download failed!");
return false;
}
System.out.println(this.url + " download completed!");
return true;
这是我自己写的一个下载图片的方法,不知道对楼主有用没,没考虑效率问题,运行的时候感觉还可以