Socket编程中,尽量用PrintWriter取代BufferedWriter
来源:互联网 发布:淘宝上的福袋可以买吗 编辑:程序博客网 时间:2024/04/28 03:10
简单化德把问题说一下吧!最近试着编写socket聊天小软件。
在服务器端和客户端产生一个Socket 后,
两边各自用getIputStream()和getOutputStream()方法,构造各自的输入输出流。
其中服务器端的Socket ss
BufferedReader is=new BufferedReader(new InputStreamReader(ss.getInputStream()) );
PrintWriter os=new PrintWriter (new OutputStreamWriter(ss.getOutputStream()) );
os.writer("一个乱七八糟的字符串");
客户端的Socket cs
BufferedReader is=new BufferedReader(new InputStreamReader(cs.getInputStream()) );
PrintWriter os=new PrintWriter (new OutputStreamWriter(cs.getOutputStream()) );
System.out.println(is.readLine());
(当然这两个肯定不是一个类文件中噢!)
按理说,应该是ss的 os对应着cs的 is. 为什么在服务器端写入了,在客户端这边没法读出来呢?
另外,如果服务器端用os.println("字符串");就好使了。
请问这是问什么?
答:
问题主要集中在,为什么客户端调用了write()和flush()后,服务器端依然read不到数据。因为socket.getOutputStream()取到的实现类是java.net.SocketOutputStream,这个类并没有覆写flush方法,它的父类java.io.FileOutputStream也没有覆写,于是最终就调到了最顶层java.io.OutputStream的flush()方法,这就恶心了,这个方法是空的。于是...
因此,还是使用Reader.readLine()和Writer.println()来处理socket吧,或者直接使用NIO。
(注意,SocketOutputStream类在JavaDoc中不存在,只在源码中有,他是个受保护的类。)
- Socket编程中,尽量用PrintWriter取代BufferedWriter
- Socket编程中,尽量用PrintWriter取代BufferedWriter
- socket编程 输出流包装为PrintWriter BufferedWriter为什么不行
- java的TCP编程模型中遇到的PrintWriter、BufferedWriter与readLine()的问题
- Java Socket 编程注意 PrintWriter
- Java Socket 编程注意 PrintWriter
- PrintWriter 和 BufferedWriter
- Java中PrintWriter、BufferedWriter以及BufferredReader基本使用详解
- OutputStreamWriter, PrintWriter, BufferedWriter, FileWrite, PrintStream
- PrintWriter和BufferedWriter的区别
- OutputStreamWriter、PrintWriter和BufferedWriter区别
- PrintWriter和BufferedWriter的区别
- TCP通信中,BufferedWriter和PrintWriter用来实现输出流的实现方式与区别
- File操作(6)------------------- printWriter,bufferedWriter
- PrintWriter和BufferedWriter的使用区别
- BufferedReader和BufferedWriter、PrintStream和PrintWriter
- 《Effective C++》:尽量用const和inline取代#define(1)
- Socket PrintWriter 中 write() 与 print() 的区别
- UID-07-PS-海报(招贴)
- jQuery取得select选择的文本与值
- java程序生成.exe或安装程序
- 十一月的生活
- 第二周学习计划
- Socket编程中,尽量用PrintWriter取代BufferedWriter
- Red Hat Enterprise Linux 组件添加删除
- 北美18名校的数据挖掘,数据分析,人工智能及机器学习课程汇总
- GreenDroid 的使用方法
- MySQL创建表语句
- PE
- java.lang.NoClassDefFoundError: javax/persistence/Cacheable的处理方法
- 发现net-snmp的snmp_set_var_typed_value()函数的"缺陷"
- 数据结构之顺序表上的基本运算