JAVA IO-網路流
阿新 • • 發佈:2019-01-28
網路
網路作為一種常見的資料來源和目標媒介。網路之間的通訊也就會涉及到傳輸層和網際層的TCP/IP協議;通過TCP/IP協議,我們可以很方便的在兩臺不同的計算機之間進行資料的通訊。
JAVA網路基礎
JAVA IO的API,使我們可以很方便的建立TCP或UDP套接字,在網路之間進行通訊。通常情況下,一個C/S架構中,一個標準的TCP工作方式為:一個客戶端開啟一個連線服務端的TCP/IP連線,然後客戶端和服務端進行通訊,當通訊結束後,關閉連線。而一個UDP工作方式則和TCP大有不同:UDP是一個無連線的協議,也就是說客戶端和服務端只負責傳送資料,而不管資料的接收方是否已經接收到資料。也正是這種不可靠的資料傳輸,讓UDP比TCP少了很多的協議開銷。
JAVA IO網路API
- TCP 協議中,JAVA通過Socket和ServerSockt來資料通訊。
- UDP協議中,JAVA通過DatagramSocket來資料通訊。
- URL+URLConnection來建立Http服務連線,進行資料通訊。
不管基於何種的資料通訊,其網路的資料通訊都是通過JAVA IO流的InputStream和OutoutStream來實現的。
一個簡單的JAVA網路例子
public static String getStrByUrlConnection(String spec) {
String result = null;
try {
URL url = new URL(spec);
URLConnection urlConnection = url.openConnection();
/* send get request default */
urlConnection.setDoInput(true);
/* send post request, communication through url.getOutputStream */
// urlConnection.setDoOutput(true);
// OutputStream outputStream = urlConnection.getOutputStream();
InputStream inputStream = urlConnection.getInputStream();
result = stream2Str(inputStream);
} catch (IOException e) {
return null;
}
return result;
}
private static String stream2Str(InputStream inputStream) {
StringBuffer sb = new StringBuffer();
byte[] buf = new byte[1024];
int len = -1;
try {
while ((len = inputStream.read(buf)) != -1) {
sb.append(new String(buf, 0, len, "utf-8"));
}
} catch (IOException e) {
return null;
}
return sb.toString();
}