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
上一篇: SQL translation
下一篇: shell脚本 read file
推荐阅读
-
String、StringBuffer和StringBuilder类的区别
-
java中String和StringBuffer的区别
-
String、StringBuilder和StringBuffer的区别
-
String、StringBuffer和StringBuilder的区别
-
荐 (全文4653字)String、StringBuffer和StringBuilder的六大区别
-
java String、StringBuilder和StringBuffer的区别详解
-
String能变化吗?和StringBuffer的区别是什么?
-
java中String和StringBuffer的区别
-
Interview ➣ ➣String StringBuffer 和 StringBuilder 的区别
-
String、StringBuffer和StringBuilder类的区别