HttpURLConnection的简单应用和String,Stringbuffer,StringBulder的区别

HTTP请求
HttpURLConnection类:

get和post两种方式的区别:

get:明文传参,不加密:?url的连接符
post:地址栏参数是不可见,密码一般设置为post方式

HttpURLConnection请求网络数据实例:

因为请求网络数据是一个耗时操作(对于计算机而言几秒的运算也是耗时操作),所以需要开启一个线程,在子线程中做耗时操作,所以要在单击事件中添加一个线程用于请求网络数据,线程代码如下:

 public void onClick(View v) {
        switch (v.getId()) {
             //请求网络数据按钮的单击事件
            case R.id.web_btn:
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //getWenInfo();
                        getwbImg();
                    }
                }).start();
                //请求网络图片的按钮的单击事件
            case R.id.web_imgbtn:
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                    //调用请求网络数据的方法
                        getWenInfo();
                        //调用请求网络图片的方法
                        getwbImg();
                    }
                }).start();

        }

写一个方法getWenInfo();

private void getWenInfo() {
        try {
            //创建url地址对象
            URL url = new URL("https://hao.360.cn/?safe");
            //创建connection对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //创建输入流对象
            InputStream sream = connection.getInputStream();
            //创建Reader对象
            InputStreamReader reader = new InputStreamReader(sream);
            //创建BufferedReader对象
            BufferedReader bufferedrader = new BufferedReader(reader);
            //开始读取
            String temp = "";
            StringBuffer stringbuffer = new StringBuffer();
            while ((temp = bufferedrader.readLine()) != null) {
                stringbuffer.append(temp);
                Log.e(stringbuffer.toString(), "zzzzz");
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
HttpURLConnection加载网络图片实例:

这里要通过handler.obtainMessage()给主线程发送消息要用到之前所学习的handler
实例化handler并且用handleMessage接收子线程发送的消息

 private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bitmap btp= (Bitmap) msg.obj;
            //图片是Bitmap型的所以要用Bitmap接收 
            image1_web.setImageBitmap(btp);
        }
    };

请求网络图片的方法:

private void getwbImg() {
        try {
                    //创建url地址对象
            URL url=new URL("https://ps.ssl.qhimg.com/sdmt/116_135_100/t011c7730ab0e185e71.jpg");
                  //创建connection对象
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                   //创建输入流对象
            InputStream inputStream=connection.getInputStream();
                 //
            Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
                //通过调用handler.obtainMessage()实例化message
            Message message=handler.obtainMessage();
               //用obj接收其所传的图片
            message.obj=bitmap;
            //发送消息
            handler.sendMessage(message);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
String,Stringbuffer,StringBulder的区别与联系

String:创建多个对象,零散的,是不可变的;串联的效率最慢
Stringbuffer:创建一个对象,是可变的:多线程安全的
StringBulder:单线程下字符串的串联;是可变的;是线程不安全的(StringBuffer的append操作用了synchronized)

String:

是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.

StringBuffer:

是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
注意:不能通过赋值符号对他进行赋值.
sb = “welcome to here!”;//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中赋值的时候可以通过它的append方法.
sb.append(“hello”);
字符串连接操作中StringBuffer的效率要比String高:
String str = new String(“welcome to “);
str += “here”;
的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将toSting(), 这样String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣。并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值, 这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的。

StringBuilder:

StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。

执行速度方面的比较:StringBuilder > StringBuffer > String

对于三者使用的总结:

如果要操作少量的数据用 = String
单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值