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

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


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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Ubuntu skills

    Ubuntu skills

    2021年5月5日
  • Eureka 集群部署

    Eureka 集群部署Eureka集群介绍 注册中心Eureka又称服务中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等。任何一个服务都不能直接去掉用,都需要通过注册中心来调用。通过服务中心来获取服务你不需要关注你调用的项目IP地址,由几台服务器组成,每次直接去服务中心获取可以使用的服务去调用既可。由于各种服务都注册到了服务中心,就有了很多高级功能条件。比如几台服务提供相同服务来做客户端负载均衡(Ribbon);监控服务器调用成功率来做断路器(Hystrix),移除服务列表中的故障点;监控服务调用时间

    2022年5月29日
  • 第十四章《redis》

    第十四章《redis》

    2021年5月29日
  • docker(6)镜像的使用「建议收藏」

    docker(6)镜像的使用「建议收藏」前言Docker的三大核心概念:镜像、容器、仓库。初学者对镜像和容器往往分不清楚,学过面向对象的应该知道类和实例,这跟面向对象里面的概念很相似我们可以把镜像看作类,把容器看作类实例化后的对象。|

    2022年7月30日
  • 分享一份软件测试项目实战(web+app+h5+小程序)

    分享一份软件测试项目实战(web+app+h5+小程序)大家好,我是谭叔。本次,谭叔再度出马,给大家找了一个非常适合练手的软件测试项目,此项目涵盖web端、app端、h5端、小程序端,可以说非常之全面。缘起在这之前,谭叔已经推出了九套实战教程。但是,这些教程以web测试和接口测试为主,没有app等项目。为了让实战项目更加全面、涵盖到各端,同时也为了满足读者粉丝们对项目的高需求,我决定再给大家找一个项目。(实力宠粉,求个赞不过分吧~)说实话,在找项目的过程中,我下载过(甚至付费下载过)N多个项目、联系过很多项目的作者,但是绝大部分项目,在我看来,并不

    2022年6月22日
  • 机器学习中的有监督学习,无监督学习,半监督学习

    机器学习中的有监督学习,无监督学习,半监督学习在机器学习(Machinelearning)领域,主要有三类不同的学习方法:监督学习(Supervisedlearning)、非监督学习(Unsupervisedlearning)、半监督学习(Semi-supervisedlearning),监督学习:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如分类。非监督学习:直接

    2022年5月28日

发表回复

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

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