java bytearraybuffer_Java中的字节数组buffer与字符串

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

165871603834

图片发自《Tomat与Java Web开发技术详解》

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

165871603834

图片发自《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原理了)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值