天天看點

套接字輸入流——InputStream

輸入緩沖裝置裡面必須要包含讀取字元的通道,否則就談不上緩沖了,這個通道就是InputStream,它屬于jdk中java.io包的類,有了它我們就可以從源頭讀取字元,它的來源可以有多種多樣,這裡主要探讨的是從socket連接配接中讀取字元。

套接字輸入流——InputStream

如上圖,InputStream充當從作業系統底層讀取socket位元組的通道,當用戶端與伺服器端建立起連接配接後就可以看成存在一條通道供雙方傳遞資訊,用戶端寫入的字元串通過通道傳遞到伺服器端,應用層則通過InputStream讀取位元組流。應用層最小機關為8位(位元組),為友善後續轉碼處理我們希望擷取到原生的位元組流,以下代碼已很大程度簡化且不保證邏輯正确,隻為說明用戶端傳輸位元組到伺服器端的過程。伺服器端建立好監聽等待用戶端發起連接配接,用戶端與伺服器端連接配接起來後通過OutputStream向伺服器端寫入位元組數組,伺服器端通過InputStream将用戶端傳過來的位元組數組讀取到buffer中,接着就可以往下對buffer進行其他處理,例如解碼操作。套接字輸入緩沖裝置就是通過InputStream将位元組讀取到緩沖裝置,并且提供對http協定的請求行、請求頭部等解析方法。其中http協定請求行及頭部規定使用ASCII編碼,位元組剛好與之對應。

①   伺服器端:

ServerSocket server = new ServerSocket(8080);

Socket socket = server.accept();

InputStream in = socket.getInputStream();

byte[] buffer = new byte[5];

int i = in.read(buffer);

socket.close();

②   用戶端:

Socket client= new Socket("127.0.0.1", 8080);

OutputStream out = client.getOutputStream();

byte[] bytes={1,1,1,1,1};

out.write(bytes);

client.close();

<a target="_blank" href="https://item.jd.com/12185360.html">點選訂購作者《Tomcat核心設計剖析》</a>