博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:PrintWriter中write与println方法的区别
阅读量:6678 次
发布时间:2019-06-25

本文共 2590 字,大约阅读时间需要 8 分钟。

原文地址:

自己遇到的问题是:刚开始学 socket 通讯, 代码运行是好着的,后来  通讯读写流 位置的代码  套在循环内,运行时就卡住了,对比老师代码后发现,老师用的是 PrintWriter 的 println() 方法,自己用的是 PrintWriter 的 write() 方法,上网搜索后发现二者区别,原文的案例和自己的情况基本一致。记录一下。

 

原文如下:

最近写了一个网络编程的小程序,即服务端与客户端相互发送信息即可。在其中发现了一些问题,就是在往IO流中写数据的问题。其中的write()方法,本身不会写入换行符,如果用write()写入了信息,在另一端如果用readLine()方法。由于读不到换行符,意味中读不到结束标记,然后由于IO流是阻塞式的,所以程序就是一直卡在那里不动了。原因即为缺少回车标识。如果在写入的时候加上“\r\n”,就可以解决这个问题了。而println()就自动加上了换行符了。

while循环中为关键代码,首先采用write()方法,将控制台上的输出写入到IO流中,然后发现服务端并没有接收到,然后2秒后追加了换行符,结果通信就恢复正常了。

下面贴上客户端的代码来说明这个问题。

--------------------- 本文来自 Jaylen_liu 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_25610165/article/details/57083118?utm_source=copy

1 package javaSocketTest.com.ljl.javaSocket; 2   3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.io.OutputStreamWriter; 9 import java.io.PrintWriter;10 import java.net.Socket;11 import java.net.UnknownHostException;12  13 public class ClientSocketTest {14  15     public static void main(String[] args) {16         try {17             BufferedReader input = new BufferedReader(new InputStreamReader(System.in));18             19             // 连接本机8000端口20             Socket socket = new Socket("127.0.0.1",8000);21             System.out.println("客户端已连接");22             // 输出流23             OutputStream os = socket.getOutputStream();24             OutputStreamWriter osw = new OutputStreamWriter(os);25             PrintWriter bw = new PrintWriter(osw);26             27             // 输入流28             InputStream is = socket.getInputStream();29             InputStreamReader isr = new InputStreamReader(is);30             BufferedReader reader = new BufferedReader(isr);31             32             String send = input.readLine();33             34             while(!send.equals("bye")){35                  bw.write(send + "");36             Thread.sleep(2000);37             bw.write("hello\r\n");38             bw.flush();39                 System.out.println("client:"+send);40                 System.out.println("server:"+reader.readLine());41                 send = input.readLine();42             }43             44             socket.close();45             bw.close();46             reader.close();47         } catch (UnknownHostException e) {48             e.printStackTrace();49         } catch (IOException e) {50             e.printStackTrace();51         } catch (InterruptedException e) {52             e.printStackTrace();53         }54     }55 }

 

转载于:https://www.cnblogs.com/mumu122GIS/p/9715104.html

你可能感兴趣的文章
当你需要处理XML文档时
查看>>
【Python之旅】第五篇(一):Python Socket通信原理
查看>>
pycharm 5注册
查看>>
java-buildpack源码分析之Release
查看>>
iptables实现网络防火墙及地址转换
查看>>
Objective-C基础语法规则教程
查看>>
fiddler的使用
查看>>
Spring事务5种属性
查看>>
css图片对齐排版思路
查看>>
如何将sql 2000数据库 移植到 mysql 数据库中
查看>>
视频播放的优化与切换测试记录
查看>>
LoadRunner脚本之EXTRARES参数
查看>>
我的友情链接
查看>>
linux下为什么删除了文件空间却不释放?
查看>>
shell脚本之循环语句
查看>>
感到自己自私和无力
查看>>
更改EMC-Powerpath软件的路径工作模式
查看>>
软件管理
查看>>
[ Talk is Cheap Show me the CODE ] : jQuery Mobile
查看>>
LVM——逻辑卷管理
查看>>