关于PrintWriter中的print与println方法的区别
今天在写一个关于socket的程序,无意间把PrintWriter中的print与println混淆了,于是写了个小demo测试了一下,代码如下:
服务端代码:
package com.city.server;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class CityServer {public static void main(String [] args){ ServerSocket serverSocket=null;Socket socket=null;int port=9999;try {System.out.println("准备启动服务......");serverSocket=new ServerSocket(port);socket=serverSocket.accept();BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter ps=new PrintWriter(socket.getOutputStream(),true);String b=br.readLine();System.out.println("客户端发送的消息:"+b);System.out.println("服务器准备返回信息!");System.out.println("返回信息时:我是服务器!");ps.println("我是服务器!");//ps.print("我是服务器! \n");//ps.flush();System.out.println("----------------------");} catch (Exception e) {// TODO: handle exception} }
}
客户端代码:
package com.city.client;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;public class CityClient {public static void main(String[] args) {Socket socket=null;int port=9999;try {System.out.println("准备启动客户端......");socket=new Socket(InetAddress.getLocalHost(), port);PrintWriter ps=new PrintWriter(socket.getOutputStream(),true);BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));String msg="你好,我是客户端!";ps.println(msg);//ps.print(msg+"\n");//ps.flush();String b=br.readLine();System.out.println("服务器返回消息:"+b); } catch (Exception e) {// TODO: handle exception}}
}
以上代码执行结果为:
服务端结果
客户端结果
把上列程序中的服务端的
ps.println("我是服务器!");
修改为ps.print("我是服务器!");
然后执行!结果如下:
服务端结果:
客户端结果:
然后把修改的代码注释掉,打开服务端以前注释掉的部分,执行结果与第一次相同。那为什么呢?通过百度之后,并对比print与println源码,现总结如下:
printwriter如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。
此外,在println中,已经调用过flush()方法,源代码如下:
public void println() {newLine();}private void newLine() {try {synchronized (lock) {ensureOpen();out.write(lineSeparator);if (autoFlush)//这里就调用了flush()方法out.flush();}}catch (InterruptedIOException x) {Thread.currentThread().interrupt();}catch (IOException x) {trouble = true;}}
在print中则没有,源代码如下:
public void print(String s) {if (s == null) {s = "null";}write(s);}
所以,在使用print方法的时候必须在发送的数据后面添加”\n”换行符标识以及在后面要调用flush()方法。
文章转载自: https://blog.csdn.net/qq_29306775/article/details/52242033
关于PrintWriter中的print与println方法的区别相关推荐
- PrintWriter中的write与println方法居然就是这些区别
为什么循环中分别用write方法和println方法效果一样呢? 1 import java.io.*; 2 3 public class WriteLog { 4 5 private Buffere ...
- java println和print_java中的print和println有区别吗
java中的print和println有区别吗 发布时间:2020-07-01 11:55:01 来源:亿速云 阅读:118 作者:Leah java中的print和println有区别吗?针对这个问 ...
- Java学习笔记1:Java中有关print、println、printf的用法和区别
Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...
- java e.getmessage() null,浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别...
Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str ...
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
- python predict_对Keras中predict()方法和predict_classes()方法的区别说明
1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...
- android add fragment,fragment中的add和replace方法的区别浅析
使用 FragmentTransaction 的时候,它提供了这样两个方法,一个 add , 一个 replace ,对这两个方法的区别一直有点疑惑. 我觉得使用 add 的话,在按返回键应该是回退到 ...
- PrintWriter write与println方法的区别
PrintWriter在以下以pw代替,在写client与server进行测试的通讯程序时,用pw.println(str)可以把数据发送给客户端,而pw.write(str)却不行! 查看源码发现: ...
- Cesium 中两种添加 model 方法的区别
概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...
最新文章
- python输入文字如何定义文字_python如何实现手动输入文字
- HDU 1251(trie树)
- 文本编辑器实现关于对话框的功能
- kibana操作elasticsearch:创建索引库
- 获取extjs 选择后的表头_批量写入审计底稿的表头信息设定页面
- OOD面向对象设计浅谈
- 群晖按装mysql_如何连接群晖里的MYSQL数据库
- nodepad++快捷键收集
- kux格式怎么转换成mp3_怎么快速无损地把视频转换成mp3格式?三种方法了解一下吗?...
- 米酷影视v7.2.1影视电影网站管理系统源码修复版
- 医院信息化集成平台建设
- 多个jdk配置环境变量
- 网站流量分析的整体思路(大数据)
- 2008年世界各国最新GDP排名
- 视频教程-【吴刚大讲堂】电商品牌文案设计方法-电子商务
- 我在国企做软件开发这4年。。
- linux xmapp的安装
- 微星z370黑苹果_微星Z370 KRAIT GAMING主板搭配I7-8700K N卡GTX 1060安装黑苹果注意事项...
- ue4 怎么传递变量到另一个蓝图_【UE4】UI注意事项
- 民用飞机着陆阶段着陆方法_着陆区第二部分的解剖