输入缓冲装置里面必须要包含读取字符的通道,否则就谈不上缓冲了,这个通道就是InputStream,它属于jdk中java.io包的类,有了它我们就可以从源头读取字符,它的来源可以有多种多样,这里主要探讨的是从socket连接中读取字符。
如上图,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();