print()方法和println()方法的区别_println的用法

print()方法和println()方法的区别_println的用法今天在写一个关于socket的程序,无意间把PrintWriter中的print与println混淆了,于是写了个小demo测试了一下,代码如下:服务端代码:packagecom.city.server;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今天在写一个关于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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169301.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA git配置[通俗易懂]

    1、idea配置git(versioncontrol)1.2、拉取代码idea菜单上选择VCS输入git代码地址,注意是http协议的地址不要用git协议的地址,目前用git协议的地址老是报错,因为git协议的址找不到配置sshprivatekey的地方,后面找到方法再更一版。点确定,代码就可以拉下来了。1.3、拉取代码提交代码快捷键ct…

    2022年4月14日
    66
  • C#中splitContainer用法

    C#中splitContainer用法在这个例子中,最上方是一个menustrip控件,其下市toolstrip控件,添加为快捷按钮。中间区域是一个splitcontainer,分为panel1和panel2.(1)IsMdiContainer–>true(2)splitContainer的具体用法:a)他不能直接用鼠标点击选中,只能右击-》选中splitContainerb)此时我们的窗体不

    2022年7月18日
    28
  • goland破解2021.7.20激活码【2021免费激活】

    (goland破解2021.7.20激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    349
  • windows 开机自动登录并锁定「建议收藏」

    windows 开机自动登录并锁定「建议收藏」首先来看看系统启动自动登录的设置:  按住Win键,再按R键(Win+R),启动”运行”窗口;  WindowsXP/2003/2008/2008R2输入”controluserpasswords2″(不含引号)回车;  Windows7输入”netplwiz”(不含引号),回车;  在”用户帐户”-“用户”界面中,取消”要使用本机,用户必须输入用户名和密码(E)”复选框;  按”确定”按钮

    2022年7月21日
    31
  • 【Python 局域网控制】——做一个超简单的局域网指令控制电脑

    【Python 局域网控制】——做一个超简单的局域网指令控制电脑程序分为两部分,一个是客户端也是被操控的端口,另一个是服务端就是用来操作被操控的端口点个赞留个关注吧!!程序很简单,是通过局域网聊天系统改造而成,没有高级的GUI框架,只有简简单单的DOS窗口,这个仅供学习,当然也可以在你的第二台电脑里放入客户端,然后用服务端进行指令操作,也是很不错的。客户端会自动获取你的IPv4地址,并显示出来,需要用客户端给出的IP地址去服务端进行连接。执行指令也很简单,用接收到的数据进行os.system()进行执行。想法多的也可以做一个鼠标定位数据传输,可达到鼠

    2022年6月22日
    33
  • spring cloud 配置中心配置哪些东西_druid连接池配置优化

    spring cloud 配置中心配置哪些东西_druid连接池配置优化访问http://localhost:8761/访问http://localhost:8761/访问http://localhost:8889/writer

    2025年7月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号