zoukankan      html  css  js  c++  java
  • java中PrintStream和PrintWriter的区别

    ava 输出流中的PrintStream 和 PrintWriter有什么区别,好像很多场合都能混用。比如用于网络间通信,发送消息时,可用PrintStream 也可用 PrintWriter

        eg:
     
           Socket client;
     
            PrintStream output = newPrintStream(client.getOutputStream());
     
            output.println("aaa");
     
            output.flush();
     
          把上例中的 PrintStream 换成 PrintWriter效果是一样的。JavaI/O流分为两类,字节流和字符流。字节流是指InputStream/OutputStream及其子类,字符流是指Reader/Writer及其子类。这两类I/O流的classhierarchy基本上是对等的,InputStreamReader/OutputStreamWriter是InputStream/OutputStream和Reader/Writer之间的桥梁。

            PrintStream是OutputStream的子类,PrintWriter是Writer的子类,两者处于对等的位置上,所以它们的API是非常相似的。PrintWriter实现了PritnStream的所有print方法。对于PrintStream,所有println方法都在内部调用相应的print方法,比如println(charx)的方法体就是调用print(x);再写入一个平台相关的换行符。PrintStream构建时会在内部new一个BufferedWriter,所有print方法都在内部调用这个Writer的write方法(write(String)或write(char[]))——对于print(char[]),直接调用write(char[]);对于其他的print方法,先用String.valueOf获得参数的字符串表示,然后调用write(String)。
     
           对于PrintWriter,所有println方法也都在内部调用print方法,print方法调用write方法。传入OutputStream时,PrintWriter会在内部构造一个BufferedWriter;而传入Writer时,PrintStream内部直接使用该Writer,此时PrintWriter是否进行了缓冲全看该Writer。
    所以,对于使用print系列方法的场合,二者没什么区别。

           但是,PrintStream是字节流,它有处理rawbyte的方法,write(int)和write(byte[],int,int);PrintWriter字符流,它没有处理rawbyte的方法。PrintStream和PrintWriter的autoflushing机制有点不同,前者在输出byte数组、调用println方法、输出换行符或者byte值10(即\n)时自动调用flush方法,后者仅在调用println方法时发生autoflushing。

  • 相关阅读:
    并行计算第一次作业(openmp)
    数据结构入门第二课(浙大mooc笔记)
    数据结构入门第一课(浙大mooc笔记)
    手把手教你用java实现syslog消息的收发,学不会你打我喽!
    单例模式你真的会了吗(上篇)?
    redis分布式锁,面试官请随便问,我都会
    快手面试归来篇一,希望你看后能过
    程序员不会理财,那跟咸鱼有什么区别?
    人生的康波周期,把握住一次,足以改变命运!
    各大公司面试题分类整理
  • 原文地址:https://www.cnblogs.com/winkey4986/p/2290248.html
Copyright © 2011-2022 走看看