zoukankan      html  css  js  c++  java
  • Java URL

    1、在网络编程的时候,一定不要忘记

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    2、URLConnection是表示应用程序与URL之间通信连接的类的父类(super class),该类的实例可以用来对由URL引用的资源进行读取和写入操作。

    HttpURLConnection 是支持HTTP特定功能的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将输入流写入内存:

    public static String readFormStream(InputStream in) throws IOException{
            ByteArrayOutputStream out=new ByteArrayOutputStream();
            int len=0;
            byte[] buffer=new byte[1024];
            
                while((len=in.read(buffer))!=-1){
                    out.write(buffer,0,len);
                }
                String result=out.toString();
                in.close();
                out.close();
                return result;
        }

     

  • 相关阅读:
    使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
    便携版WinSCP在命令行下同步文件夹
    ffmpeg (ffprobe)分析文件关键帧时间点
    sqlite删除数据或者表后,回收数据库文件大小
    ubuntu 20.04下 freeswitch 配合 fail2ban 防恶意访问
    ffmpeg使用nvenc编码的结论记录
    PC版跑跑卡丁车 故事模式 亚瑟传说章节 卡美洛庆典 2阶段 心灵之眼 攻略
    There was an error loading or playing the video
    Nvidia RTX Voice 启动报错修复方法
    火狐浏览器 关闭跨域限制
  • 原文地址:https://www.cnblogs.com/lyajs/p/5347881.html
Copyright © 2011-2022 走看看