JAVA 网络编程中,输出io方法——printWriter中write()和println()区别
来源:互联网 发布:矩阵分解 编辑:程序博客网 时间:2024/06/01 08:12
最近学习JAVA网络编程,在服务器端和客户端产生一个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("字符串");就好使了。
请问这是问什么?
以下整理了开源中国社区的回答:
print() 方法等同于 write() 方法
println() 方法是在 print() 的基础上多调用了一个 newLine() 方法(私有方法)
而 newLine() 方法会调用 flush()
所以关键在于 flush()
- 你用PrintWriter,确实就应该调用println()方法,而不是父类集成过来的write方法。因为PrintWriter本身就是用来执行Print操作的。显然那个write方法是直接继承了父类的方法,可能子类中没有重写或者做了其他操作。
btw socket通信最好使用DataInputStream和DataOutputStream去封装读写的操作,或者用 ObjectInputStream和ObjectOutputStream,而不要使用你写的BufferedReader和 BufferedWriter。
- 查了一下,网上有很多人问这个问题,老外多一下。
问题主要集中在,为什么客户端调用了write()和flush()后,服务器端依然read不到数据。因为 socket.getOutputStream()取到的实现类是java.net.SocketOutputStream,这个类并没有覆写flush 方法,它的父类java.io.FileOutputStream也没有覆写,于是最终就调到了最顶层java.io.OutputStream的 flush()方法,这就恶心了,这个方法是空的。于是...
因此,还是使用Reader.readLine()和Writer.println()来处理socket吧,或者直接使用NIO。
(注意,SocketOutputStream类在JavaDoc中不存在,只在源码中有,他是个受保护的类。)
- JAVA 网络编程中,输出io方法——printWriter中write()和println()区别
- JAVA printWriter中write()和println()区别(特别注意)
- PrintWriter中write与println方法的区别
- PrintWriter中write与println方法的区别
- JAVA中socket编程println()和 write()方法
- 关于PrintWriter的println()和write()方法区别
- PrintWriter 的Write()+flush()和println()方法区别
- Java中PrintWriter类的println方法。
- java.io.PrintWriter 中 write() 与 print() 的区别
- java.io.PrintWriter 中 write() 与 print() 的区别
- java.io.PrintWriter 中 write() 与 print() 的区别
- PrintWriter write与println方法的区别
- 简述PrintWriter中write()方法和print()方法的区别?
- PrintWriter中write和print方法的区别
- PrintWriter 的Write()方法和println()方法有何细微的区别
- 输出流中方法out.write与out.println的区别
- java中PrintStream和PrintWriter的区别
- Java中print和println的区别
- java网络编程学习(一)
- javascript将url中的参数加密解密功能
- Cloud Native
- java中遍历map的四种方法
- 二叉树最小深度
- JAVA 网络编程中,输出io方法——printWriter中write()和println()区别
- 关于 WinXP SP2 下的 MIDI 漏洞利用
- A10负载均衡设备基础配置
- 常见损失函数
- Java多线程编程中不变模式的详解
- Android Studio没有自带HttpClinet类库的解决办法
- 见站 建站 见站建站啦
- java垃圾回收之CMS
- 类加载时机