从网络下载html页面和图片

public class InternetTest{ @Test public void getImage() throws Exception{ String urlPath="http://www.google.com.hk/intl/zh-CN/images/logo_cn.png"; URL url=new URL(urlPath); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(6*1000); if (conn.getResponseCode()==200) { InputStream inputStream=conn.getInputStream(); byte[] data=readStream(inputStream); File file=new File("my.png"); FileOutputStream outputStream=new FileOutputStream(file); outputStream.write(data); outputStream.close(); } } @Test public void getHtml() throws Exception{ String urlPath="http://news.google.com/nwshp?hl=zh-cn&tab=fn&vanilla=0"; URL url=new URL(urlPath); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(6*1000); if (conn.getResponseCode()==200) { InputStream inputStream=conn.getInputStream(); byte[] data=readStream(inputStream); //System.out.println(data);//返回的是首地址 System.out.println(new String(data)); } } private byte[] readStream(InputStream inputStream) throws IOException { // TODO Auto-generated method stub ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int len=-1; while ((len=inputStream.read(buffer))!=-1) { outputStream.write(buffer, 0, len); } outputStream.close(); inputStream.close(); return outputStream.toByteArray(); } } 

connection.setReadTimeout(6*1000);

这句话在android程序里面一定要有,因为android系统有一个阻塞时间,

 

 

 

ByteArrayOutputStream的用法:

ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。具体用法如下: 
ByteArrayOutputStream:    可以捕获内存缓冲区的数据,转换成字节数组 ByteArrayInputStream: 可以将字节数组转化为输入流 

public static void main(String[] args) { int a = 0; int b = 1; int c = 2; ByteArrayOutputStream bout = new ByteArrayOutputStream(); bout.write(a); bout.write(b); bout.write(c); byte[] buff = bout.toByteArray(); for (int i = 0; i < buff.length; i++) System.out.println(buff[i]); System.out.println("***********************"); ByteArrayInputStream bin = new ByteArrayInputStream(buff); while ((b = bin.read()) != -1) { System.out.println(b); } }  

如上所示,ByteArrayOutputStream把内存中的数据读到字节数组中,而ByteArrayInputStream又把字节数组中的字节以流的形式读出,实现了对同一个字节数组的操作. 

 

综合DataOutputStream&DataInputStream的作用和功能,与ByteArrayOutputStream和ByteArrayInputSream使用将更方便.此时DataOutputStream&DataInputStream封闭了字节流,以适当的形式读出了字节数组中的数据.如下所示: 

public static void main(String[] args) throws IOException { ByteArrayOutputStream bout = new ByteArrayOutputStream(); DataOutputStream dout = new DataOutputStream(bout); String name = "xxy"; int age = 84; dout.writeUTF(name); dout.writeInt(age); byte[] buff = bout.toByteArray(); ByteArrayInputStream bin = new ByteArrayInputStream(buff); DataInputStream dis = new DataInputStream(bin); String newName = dis.readUTF(); int newAge = dis.readInt(); System.out.println(newName + ":" + newAge); }  

 

你可能感兴趣的:(html,exception,网络,String,buffer,byte)