zoukankan      html  css  js  c++  java
  • Java I/O (1)

    先说概念:

    Java API中,可以从其中读入一个字节序列的对象叫做输入流,可以向其中写入一个字节序列的对象叫做输出流。这些字节序列的来源地 和 目的地 可以文件、网络连接甚至内存块。抽象类InputStrean和OutputStream构成了I/O类层次结构的基础。

    在java IO中总有好多的类,让人不知道该怎么使用。其实这样一种复杂的机制是为了让我我们的使用更加灵活。我们可以这样来理解java中的各种IO类:读写的基本单位是字节,InputStream和OutputStream可以读写单个字节或者字节数组,但要是想要读写字符串或者数字等,就需要功能更加强大的子类,如DataInputStream、DataOutputStream,可以以二进制格式读写所有的基本java类型。

    java流类家族中有两类,一种流可以从文件中获取数据,一种流可以读入数值类型:某些输入流(如FileInputStream)可以从文件获取字节,而其他的输入流(如DataInputStream)可以把自己组装到更有用的 数据类型中。在使用中,通常对二者进行结合,例如,要从文件中读入数字,需要创建FileInputStream类对象,将其传递给DataInputStream的构造器。这样的情况下,输入流默认是不被缓冲区缓存的,即每调用一次read方法,都会请求操作系统再分发一个字节。这时候请求一个数据块,然后放置在缓冲区中会显得更加高效。这时候,就需要用到缓冲流,BufferedInputStream。上面的需求中,要把FileInputStream对象传入BufferedInputStream构造器,在把生成的对象传入DataInputStream。把DataInputStream放到构造器链的最后,是为了使用其提供的方法。

    有时候我们有这样的需求:读入输入的时候,需要预览下一个字节。(待补充……)

    java 读写文件的几种方式,这篇文章总结得很好,强烈推荐:

    https://www.cnblogs.com/ll409546297/p/7197911.html

    例如,在一次实践中我使用的是其中BufferReader嵌套InputStreamReader嵌套FileInputStream的方式,因为我需要按行读取文件内容,最外层的bufferedReader正好提供了这样的方法。关于这三个类的区别,在https://blog.csdn.net/qq_34569497/article/details/80476042这篇文章中有介绍。大意就是,inputstream读出来的是字节,inputstreamreader读出来的是字符,bufferreader是一下子读了一个数据块进行缓存,减少磁盘交互。

    关于jave I/O,根据输入输出对象的不同,分为文本IO、二进制IO、对象IO。(待补充)

  • 相关阅读:
    问题集
    第04次作业-树
    06-图
    05-查找
    04-树
    03-栈和队列
    02-线性表
    01-抽象数据类型
    C语言--总结报告
    C语言--函数嵌套
  • 原文地址:https://www.cnblogs.com/Jing-Wang/p/10779313.html
Copyright © 2011-2022 走看看