站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题读取大的网络文件总是出错!

读取大的网络文件总是出错!

摘要: 读取大的网络文件总是出错!


http://community.csdn.net/Expert/topic/4681/4681395.xml?temp=.5135309
上面是我以前问的问题,关于读一个大的网络文件时速度太慢,后来一位朋友告诉我:

s=s + String.valueOf(buffer);
这句有问题,效率低下。
你的s估计是String吧?
把s 改为StringBuffer,然后
把s=s + String.valueOf(buffer)改为s.append(buffer)
估计会快许多。


我就照着上面朋友说的,把s=s + String.valueOf(buffer)改为s.append(buffer)了,但是发现读取到的html代码中偶尔会包含一些乱码,数据一下变的没规则了,也就没办法分析。 用我原来的方法,虽然读取速度很慢,但是读到的文件html代码却很正确。 真不知道是什么原因了?


估计编码问题



我刚才试了试,一切正常,没有发现你说的问题啊!
这是代码
public class Test3 {

public static void main(String[] args) {
// TODO Auto-generated method stub
URLConnection con = null;
BufferedReader in = null;
StringBuffer s = new StringBuffer();
try {
char[] buffer = new char[1024];
URL u = new URL(
"http://computing.unn.ac.uk/staff/cgpb2/web/Customers.html");
con = u.openConnection();
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
while (in.read(buffer) != -1) {
s.append(buffer);
}

in.close();
FileWriter fw = new FileWriter(new File("F://del.txt"));
fw.write(s.toString());
} catch (Exception e) {
System.out.println("页面读取失败!");
e.printStackTrace();
}

}
}
另外,对你的程序提点个人意见:
改写一下while(in.read(buffer) != -1)语句,这样效率是比较低的,应该利用int read(char[] cbuf, int off, int len) 方法进行读。


再补充两点:
1 速度慢的瓶颈主要是网络带宽,而不是程序
2 在关闭流之前要in.flush()一下


同意上面的,在网络上操作文件是要好好考虑一下注意事项的


↑返回目录
前一篇: 实现下列哪个接口可以对TextField对象的事件进行监听和处理?
后一篇: cry()方法