Java中的字节数组buffer与字符串

读取socket请求输入流,获取其大小,根据大小申请相应大小字节数组byte[] buffer,将输入流读取到申请好的buffer字节数组中,最后,将其转换成字符串(转换可以跟第二个参数,指定字符编码,比如GBK或者UTF-8 等)。

Java中的字节数组buffer与字符串_第1张图片
图片发自《Tomat与Java Web开发技术详解》


同理,请求的输入流要从字节数组转为字符串才能打印出来,new String(byte[])那么响应的输出流要从字符串转成字节数组(str.getBytes())才能网络传输。

Java中的字节数组buffer与字符串_第2张图片
图片发自《Tomat与Java Web开发技术详解》

这里的输出流的write方法(第二张图)对应输入流的read方法(第一张图),参数都是字节数组,保持了一致性。使用之前都要先申请一定大小的字节数组空间,通常称为buffer,即缓冲区。


注意:

1、第二张图的意思是要把请求输入的内容原样响应回去。且这个例子只是使用Java的Socket和ServerSocket模拟http请求和响应过程,uri只是代表一个文本文件的路径,并非真实的uri。

2、图中的换行符应该使用System.getProperty("line.separator"),这样能跨平台移植!!

3、网络到底是怎么通信的?socket可以建立连接,并能传输数据流(客户端请求输出流——>服务器端接收请求输入流——>服务器端根据请求输出相应的响应输出流——>客户端接收响应输入流);同一个socket对象既有输出流也有输入流,所以一次socket能完成一次完整的请求响应过程。一次客户端的socket对应一次服务器端的serversocket,这个过程是完美的,也颇为有趣。(这个过程是最mini的http原理了)。

你可能感兴趣的:(Java中的字节数组buffer与字符串)