url.openConnection()和conn.connect()
来源:互联网 发布:linux软件包管理 编辑:程序博客网 时间:2024/06/05 09:58
URLConnection是所有表示应用程序与URL之间通信连接的类的父类(super class),该类的实例可以用来对由URL引用的资源进行读取和写入操作。
HttpURLConnection 是支持HTTP特定功能的URLConnection,还有JarConnection是URLConnection的直接子类。
创建URLConnection对象主要要经历两步:
第一步是creat:URLConnection conn = url.openConnection();
第二步是connect:conn.connect();//这两个是不同的,见下面调试
在created和connected之间可以设置一些变量选项(如setDoInput,超时等),而如果connect之后再设置就会引发异常(网上也有这个问题)
在需要连接才能执行的操作(如getInputStream等应用层操作),程序会暗中(implicitly)执行连接
一旦连接可用,就可以访问获取资源,如执行getInputStream()等,对于HttpURLConnection,还有conn.getResponseCode()==200来判定服务器是否返回正确的应答码以表明请求被接受。
在URLConnection中,有一个域boolean connected ,值为true表明已经建立到指定URL的连接;false则没有(华丽的标记)
connect() 当连接还未被建立时,打开一个communications link,而如果这个链接已经被打开(connected值设置为true)则 ignore it 。
下面编了一个小程序进行调试:
URL url = new URL("http://www.google.cn");URLConnection conn = url.openConnection();conn.setConnectTimeout(10000);conn.connect();InputStream inStream = conn.getInputStream();
当程序执行完openConnection()之后,域connected值还是false,说明这时候还未连接。等执行到connect()之后,connected才变为true,说明这时候才完成连接。而当我注释掉connect()后,再运行程序,connected值到getInputStream执行完又变为true,这时候知道getInputStream会使连接暗中被执行。
综上,对于一般需要连接才执行的操作(可能也有不需要连接的操作吧~~),connect()是可以省略的。但是只有在connect()执行完,连接才正式建立,而不是openConnection(只是创建了一个连接对象)
(后记)可以利用ByteArrayOutputStream将输入流写入内存:
ByteArrayOutputStream outstream=new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int len=-1; while((len=inStream.read(buffer)) !=-1){ outstream.write(buffer, 0, len); } outstream.close(); inStream.close();
- url.openConnection()和conn.connect()
- android-urlconnection.connect()和url.openconnection()的区别
- url.openStream()和url.openConnection().getInputStream()两者区别
- url.openStream()和url.openConnection().getInputStream()两者区别
- (HttpURLConnection) url.openConnection();问题
- Android URL openConnection无法打开链接
- 关于JAVA通过url.openConnection()时发生的乱码
- 关于URL.openConnection()得到的连接对象问题
- Java networking学习笔记(二):URL的openConnection()函数
- .xsession-errors:openConnection: connect: No such file or directory cannot connect to brltty at :0
- ASP中conn,1,1和conn,1,3 conn,3,3 conn,2,3 conn,3,2详解
- 根据文件的url在网络上下载文件url.openConnection()
- HttpURLConnection中connect()方法是否要显示调用及openConnection()方法源码探究
- Conn
- conn
- conn
- conn
- conn
- 字符串和数字之间的转换(C/C++)
- 浅论冒泡排序算法
- Office 2016 for MAC
- C++那些细节--const与函数
- 假寒假第一天
- url.openConnection()和conn.connect()
- oracle行列转换
- 浅论冒泡排序算法
- C++中cin>>、cin.get()、cin.getline()、getline()、gets()输入函数详解
- 【HDU 1020】Encoding 水
- 获取andorid设备的IP地址和MAC地址
- C语言结构体中的内存对齐以及位域和位域的应用
- 重拾java基础(十四):数组总结
- 内部类的使用