• 第十八章:输入与输出支持


    打印流

      如果现在要想通过程序实现内容的输出,核心的本质一定要依靠OutputStream类完成,但是OutputStream类有一个最大的缺点,这类的数据输出操作功能有限public void write(byte[] b) throws IOException,所有的数据一定要转为字节数组后才可以输出,于是假设说现在你的项目里面可能输出的是long,double,Date,在这样的情况下就必须将这些数据变为字节的形式来处理,这样的处理一定是非常麻烦的,所以在开发之中最初的时候为了解决此类的重复操作,往往会由开发者自行定义一些功能类来简化输出过程。(打印流的设计思想见书中代码)

      在整个操作之中打印流的设计思想的本质在于:提高已有类的功能,例如:OutputStream是唯一可以实现输出的操作标准类,所以应该一起为核心根本,但是这个累输出的操作功能有限,所以不方便进行输出各个数据类型,那么就为它做出了一层包装,所以此时采用的设计思想就是“装饰设计模式”

      但是既然所有的开发者都已经发现了原始中的OutputStream功能的不足,设计者也一定可以发现,所以为了解决输出问题,在java.io包里面提供有打印流PrintStream、PrintWriter

      下面使用PrintWriter来实现数据的输出操作。

      从JDK1.5开始PrintWriter类里面追加有格式化输出的操作支持:

      比起直接使用OutputStream类,那么使用PrintWriter、PrintStream类的处理操作会更加简单。以后主要是程序进行内容输出的时候全部使用打印流。

    System类对IO的支持

       System类是一个系统类,而且是一个从头到尾一直都在使用的系统类,而在这个系统类之中提供有三个常量

      System.out和System.err都是同一种类型的,如果现在使用的是Eclipse则在使用System.err输出的时候会使用红色字体,System.out会使用黑色字体。

      最早设置两个输出的操作是用目的的:System.out是输出哪些希望用户可以看见的信息,System.err是输出哪些不希望用户看到的信息,如果有需要也可以修改输出的位置:

      在System类里面还提供有一个in的常量,而这个常量对应的是标准输入设备键盘的输入处理,可以实现键盘数据输入。

      但是这样的键盘输入处理本身是有缺陷的:如果你现在的长度不足,只能够接受部分数据,所以这个输入要进行重复的数据流接受,而且在接受的时候还有可能会牵扯到输入中文的情况,如果对于中文的处理不当,则也有可能造成乱码问题

    BufferReader缓冲输入流

       BufferReader(extends Reader)类提供的是一个缓冲输入流的概念,也就是说利用BufferedReader类可以很好的解决输入流数据的读取问题,这个类是在最初的时候提供的最完善的数据输入的处理(JDK1.5之前,JDK1.5之后除了一个功能更强大的类代替次类),之所以使用这个类来处理,是因为这个类中提供有一个重要的方法:

      将利用这个类实现键盘输入数据的标准化定义

      在以后实际的开发过程中经常会遇见输入数据的情况,而所有输入数据的类型都是通过String描述的,那么这样就方便了接收者进行各种处理

      对于现在的java开发由键盘输入数据的情况并不多了,但是作为一些基础的逻辑训练还是可以使用键盘输入数据的,对于输入数据的标准做法(JDK1.5前)就是上面的实现操作。实际开发中所有输入的数据全部都是字符串,这样可以方便用户验证与进行数字字符串的复杂处理。

    Scanner扫描流

       java.util.Scanner(不是IO了)是从JDK1.5之后追加的一个程序类,其主要的目的是为了解决输入流的访问问题的,可以理解为BufferReader的替代功能类,在Scanner类有如下几种操作方法:

      此时可以明显感受到Scanner的处理会更加的简单。

      使用Scanner输入数据还有一个最大的特点是可以利用正则进行判断。

      现在可以发现Scanner的整体设计要好于BufferReader,而且要比直接使用InputStream类读取要方便。如果现在使用InputStream读取一个文本文件中的所有的内容信息,如果采用的是InputStream类,那么就需要依靠内存输出流进行临时数据的保存,随后还要判断读取的内容是否是换行。

      范例:使用Scanner读取

      在以后的开发过程之中,如果程序需要输出数据一定使用打印流,输入数据使用Scanner或BufferReader.

     

  • 相关阅读:
    2020年终将过去
    Opus从入门到精通(一):简介
    0907 RTCP FB
    ClickHouse源码笔记6:探究列式存储系统的排序
    C++雾中风景17:模板的非推断语境与std::type_identity
    ClickHouse源码笔记5:聚合函数的源码再梳理
    ClickHouse源码笔记4:FilterBlockInputStream, 探寻where,having的实现
    ClickHouse源码笔记3:函数调用的向量化实现
    Doris开发手记1:解决蛋疼的MySQL 8.0连接问题
    声音克隆_论文翻译:2019_Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis
  • 原文地址:https://www.cnblogs.com/djlindex/p/11333585.html
Copyright © 2020-2023  润新知