InputStream问题
import java.io.FileInputStream;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Test{
public static void main(String[] args){
try {
URL url = new URL("http://hiphotos.baidu.com/%B4%BA%D6%C1%C7%EF%C1%A7/pic/item/9dc34434786980a3d1a2d3e3.jpg");
URLConnection con = url.openConnection();
long size = con.getContentLength();
System.out.println(size);
InputStream in=url.openStream()
//上面的方法url.openStream()返回一个InputStream一个对象,但是InputStream是一个抽象类,不是说抽象类不能实例化吗,这里为什么InputStream 又可以实例化。
FileOutputStream out = new FileOutputStream("D://17266.gif");
int i=in.read();
while(i!=-1){
out.write(i);
i=in.read();
}
in.close();
out.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[ 本帖最后由 chrispull 于 2010-10-26 22:30 编辑 ]
搜索更多相关的解决方案:
InputStream
----------------解决方案--------------------------------------------------------
定义成 InputStream , 赋值可以是实现了该类的任何子类, 你调试一下就知道实际上是哪个类了.
----------------解决方案--------------------------------------------------------
哦明白了。url.openStream()方法里真正返回的是FilterInputStream类型(它是InputStream的子类),但是该方法的返回值是InputStream类型的,所以就把FilterInputStream类型强制转换成它的父类InputStream类型。其实其实这里就是使用了多态机制。
----------------解决方案--------------------------------------------------------