Java 输入输出——流

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 输入输出——流相关的知识,希望对你有一定的参考价值。

  Java输入输出大致可以分为两类,流式操作与非流式操作,流式操作主要关注与文件内容的读写,非流式操作主要用于文件在磁盘上的管理。下面首先学习流式数据操作。

  与c++类似,java中也提供了流的概念来处理输入输出(I/O)。Java中,可以从其中读入一个字节序列的对象称为输入流,可以向其中写入一个字节序列的对象称为输出流。输入输出流都是对象,这一类对象需要绑定特定的字节来源和目的地,可以是标准输入输出(键盘和屏幕),文件或者网络,甚至可以是内存块。

  抽象类InputStream和OutputStream构成了输入输出(I/O)类层次结构的基础。这两个类主要用来处理字节输入输出,即继承了这两个类的子类对象主要是用来处理字节流的。通常情况下,处理字符的需求更为常见,为了处理字符,java中提供了Reader和Writer两个抽象类来处理字符输入输出。

  InputStream类的基础方法是read()方法,这个方法从输入源中读入一个字节,返回值即为读入的字节,返回类型为int。具体从哪种读入源读入取决于具体实现抽象类的具体类型,例如FileInputStream对象从绑定的文件中读入字节,System.in对象从标准输入(键盘)读入字节。InputStream还有其他方法,例如读入一个字节序列,跳过n个字节等。OutputStream类的基础方法是write(int n),用于向输出流中写入一个字节。以这两个抽象类为基础,java中有一个完整的流类家族,用来处理各种各样的输入输出问题。如下图所示:

   技术分享

   技术分享

  类似于InputStream与OutputStream,Reader与Writer也有两个基本方法,分别是read与write,不同之处在于这两个函数的输出与输入是两字节的Unicode码元,而不是一个字节。同时也有一个完整的类家族来处理各种字符输入输出问题。类层次结构为:

  技术分享   

   技术分享

  输入输出类中有一些通用的方法,例如close,flush等等。这些方法主要是流类通过实现接口获得的,这些接口主要包括closeable,flushable,Readable,Appendable等。

组合流过滤器

  java中的各种输出输出流类完成各种各样的功能,例如FileInputStream实现文件的流式输入,DataInputStream实现java基本数据类型的输入,它们各自完成自己的功能,其他的流类无法使用其他流类的功能,为了实现各种功能的组合,例如实现利用度基本数据类型的方式读一个文件,此时可以使用:

FileInputStream fin=new FileInputStream(“file.data”);

DataInputStream din=new DataInputStream(fin);

double s=din.readDouble();

  当需要从标准输入中利用直接读java基本数据类型的是,可以使用:

DataInputStream din=new DataInputStream(System.in);

double s=din.readDouble();

  利用这种嵌套流过滤器(组合流过滤器)的方式,可以实现组合各种各样的功能。同时还可以用来沟通字节处理流与字符处理流。如下:

BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream(“file.tax”),”UTF-8”));     //只是一种展示

  关于字节流与字符流,字节流可以处理各种各样的文件,例如音频和图片,而字节流只能实现处理文本。

以上是关于Java 输入输出——流的主要内容,如果未能解决你的问题,请参考以下文章

输入流与输出流

Java-输入输出流

java中输入输出流如何把数据输出为Excel表格形式

java 输入输出流 一个类中只能使用一次吗? 流关闭后 就不能再打开吗?

java 输入输出流 一个类中只能使用一次吗? 流关闭后 就不能再打开吗?

java中输入输出流如何把数据输出为Excel表格形式