黑马程序员技术交流社区

标题: 基于Tcp网络传输协议的socket读取流问题 [打印本页]

作者: 赵洋洋    时间: 2014-5-15 15:09
标题: 基于Tcp网络传输协议的socket读取流问题
serversocket ss=new serversocket(45532);
socket s=ss.socket();
s.getInputStream()他读取的是字节流
而以下语句:
BufferedReader bufIn=new  BufferedReader(new InputStreamReader(s.getInputStream()));
查API知道 InputStreamReader读入的是字符流,为什么不能直接用字节流?
作者: 暧緑荼    时间: 2014-5-15 15:23
可以用字节流但是如果你要处理文字的话用字符流会好点
serversocket ss=new serversocket(45532);
socket s=ss.socket();
InputStream  in = s.getInputStream()
in.read(..)
.
.
.
.
这样就是字节流读取了,身边没有编码的东西只能给你说下思路了

作者: weimoliang    时间: 2014-5-15 16:02
1.InputStreamReader 继承了Reader类 所以它肯定是字符流读取类
2.InputStreamReader的功能是将字节流转换为字符流 ,这是他的构造方法InputStreamReader(InputStream in)

作者: 龙健    时间: 2014-5-16 01:10
BufferedReader bufIn=new  BufferedReader(new InputStreamReader(s.getInputStream()));

其实你也可以使用字节流,这里使用这条语句只是为提高写入的效率而已,BufferedReader读取的源是字符流,然而s.getInputStream()读取的是字节流,就要用到一个字节转换流,InputStreamReader(将字节流装换为字符流),你可以指定使用的编码,当然也可以使用默认的编码“gbk”, 用到缓冲区,提高读取效率。
作者: 赵洋洋    时间: 2014-5-18 09:15
龙健 发表于 2014-5-16 01:10
BufferedReader bufIn=new  BufferedReader(new InputStreamReader(s.getInputStream()));

其实你也可以使 ...

谢谢,,也就是说可以不用转换
作者: 赵洋洋    时间: 2014-5-18 09:16
赵洋洋 发表于 2014-5-18 09:15
谢谢,,也就是说可以不用转换

字节流不会放进缓冲区吗?
作者: 龙健    时间: 2014-5-18 09:59
赵洋洋 发表于 2014-5-18 09:16
字节流不会放进缓冲区吗?

可以啊,字节流也可以缓冲啊,BuffereInputStream  BuffereWriterOutputstream   都是缓冲流,只是他们介绍的缓冲对象不一样而已
作者: 赵洋洋    时间: 2014-5-18 15:24
嗯,,,,,明白了字节流跟字符流的具体区别,,3Q
作者: 张梓楠    时间: 2014-5-26 10:37
原来是这样   学习了
作者: 小小菜鸟101    时间: 2014-6-11 21:08
今天刚学了了。
作者: 小小菜鸟101    时间: 2014-6-11 21:11
weimoliang 发表于 2014-5-15 16:02
1.InputStreamReader 继承了Reader类 所以它肯定是字符流读取类
2.InputStreamReader的功能是将字节流转换 ...

一般都用BufferedReader的吧?
作者: atyzy    时间: 2016-12-22 17:25
好东西,值得学习一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2