Get和Post方式有什么区别
get参数通过url传递,post放在request body中。
get请求在url中传递的参数是有长度限制的,而post没有。
get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
get请求只能进行url编码,而post支持多种编码方式
get请求会浏览器主动cache,而post支持多种编码方式。
get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET产生一个TCP数据包;POST产生两个TCP数据包。
HttpUriConnection请求网络数据实例
URL url = new URL("http://img4.imgtn.bdimg.com/it/u=435645492,244071514&fm=27&gp=0.jpg");
//创建Connection对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//创建输入流对象
InputStream inputStream = connection.getInputStream();
//创建Reader对象
InputStreamReader reader=new InputStreamReader(inputStream);
//创建BufferedReader对象
BufferedReader bufferedReader=new BufferedReader(reader);
//开始读取
String temp="";
StringBuffer stringBuffer=new StringBuffer();
while ((temp=bufferedReader.readLine())!=null){
stringBuffer.append(temp);
}
Log.e( "goOnline: ",stringBuffer.toString() );
我们可以在控制台上看到Html的源代码
HttpUriConnection加载网络图片实例
package com.example.dfcn.sexmouth;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class WebActivity extends AppCompatActivity {
private Button btn_online;
private ImageView pic_iv;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
pic_iv.setImageBitmap((Bitmap) msg.obj);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
btn_online = findViewById(R.id.btn_Online);
pic_iv = findViewById(R.id.iv_pic);
btn_online.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
goOnline();
}
}).start();
}
});
}
private void goOnline() {
try {
//创建URL地址对象
URL url = new URL("http://img4.imgtn.bdimg.com/it/u=435645492,244071514&fm=27&gp=0.jpg");
//创建Connection对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//创建输入流对象
InputStream inputStream = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
Message message = new Message();
message.obj = bitmap;
handler.sendMessage(message);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这样就可以访问网络图片了
String/StringBuffer/StringBuilder有什么区别
三者在执行速度方面的比较:StringBuilder > StringBuffer > String
String:字符串常量
StringBuffer:字符创变量
StringBuilder:字符创变量
从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象
String s = "abcd";
s = s+1;
System.out.print(s);// result : abcd1
我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
StringBuilder与 StringBuffer:
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer