java 摧回输入流_深入理解Java输入输出流

输入流是从文件读取数据,是一个拉取数据的过程;输出流是将数据写入到文件,是一个推送数据的过程。

为了便于理解输入输出流,前面都是以文件为数据源来讨论的。其实,Java的输入与输出流支持任何数据源的读取与写入,包括键盘、文件、网络、数据库等数据源。

输入流和输出流按读取和写入的数据单位可分为字节流和字符流,字节流是以字节为单位传输数据的流,字符流是以字符为单位传输数据的流。

Java所提供的输入流和输出流类封装在Java.io包中,Java输入输出流的体系结构如下图所示:

从图中可以看出,Reader和Write为字符输入输出流,InputStream和OutputStream为字节输入输出流。这四个类属于抽象流类,不能在程序中直接实例化使用,可以使用其派生的类。

InputStream类

InputStream抽象类是表示字节输入流的所有类的超类,它以字节为单位从数据源中读取数据,其派生的常用子类说明如下:

●  FileInputStream类

该类以字节为单位从文件中读取数据。

●  ByteArrayInputStream类

该类在内存中创建一个字节数组缓冲区,从输入流读取的数据保存在该字节数组缓冲区中。

●  ObjectInputStream类

该类从输入流读入对象,读取对象信息。

InputStream类定义了Java的输入流模型,下面是其常用方法的一个说明:

●  public abstract int read() throws IOExecption

该方法用于从输入流中读取数据的下一个字节,返回读到的字节值,若遇到流的末尾,返回-1。

●  public int read(byte[] b) throws IOExecption

该方法用于从输入流中读取b.length个字节的数据,并将数据存储到缓冲区数组b中,返回的是实际读到的字节数。

●  public int read(byte[] b,int off,int len) throws IOExecption

该方法用于从输入流中读取len个字节的数据,并从数组b的off位置开始写入到这个数组中。

●  public void close() throws IOExecption

关闭此输入流,并释放与此输入流相关联的所有系统资源。

OutputStream类

OutputStream抽象类是表示字节输出流的所有类的超类,它以字节为单位将数据写入数据源,其派生的常用子类说明如下:

●  FileOutputStream类

该类以字节为单位将数据写入到文件。

●  ByteArrayOutputStream类

该类在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。

●  ObjectOutputStream类

该类将对象信息写入到输出流。

下面是OutputStream类的常用方法介绍。

●  public abstract void write(int b) throws IOExecption

该方法用于将指定的字节写入到输出流。

●  public int write(byte[] b) throws IOExecption

该方法用于将b.length个字节从指定的byte数组写入到输出流。

●  public int write(byte[] b,int off,int len) throws IOExecption

该方法用于将len个字节的数据,并从数组b的off位置开始写入到输出流。

●  public void close() throws IOExecption

关闭此输出流,并释放与此输出流相关联的所有系统资源。

Reader类

Read抽象类是表示字符输入流的所有类的超类,它以字符为单位从数据源中读取数据。其派生的常用子类说明如下:

●  InputStreamReader类

该类从数据源读取字节并将其解码为使用指定的字符集的字符。

●  FileReader类

该类继承于InputStreamReader,用于读取字符类文件,如文本文件。

●  BufferedReader类

该类用于将缓冲区中的数据以字符为单位读取。

下面是Reader类的常用方法介绍。

●  public int read(int b) throws IOExecption

该方法用于读取单个字符,返回作为整数读取的字符,如果已经到达流的末尾,返回-1。

●  public int read(char[] cbuf) throws IOExecption

该方法用于将字符读入到cbuf,返回读取的字符数。

●  public abstract int read(char[] cbuf,int off,int len) throws IOExecption

该方法用于读取len个字符的数据,并从数组cbuf的off位置读入到这个数组中。

●  public abstract  void close() throws IOExecption

关闭此输入流,并释放与此输出流相关联的所有系统资源。

Writer类

Writer抽象类是表示字符输出流的所有类的超类,它以字符为单位向数据源写出数据。其派生的常用子类说明如下:

●  OutputStreamWriter类

该类将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流的输出对象。

●  FileWriter类

该类从 OutputStreamWriter 类继承而来。该类按字符向字符类文件写入数据。

●  BufferedWriter类

该类用于将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符串的高效写入。

下面是Writer类的常用方法介绍。

●  public void write(int b) throws IOExecption

该方法用于向数据源写入单个字符。

●  public void write (char[] cbuf) throws IOExecption

该方法用于向数据源写入字符数组。

●  public abstract void write (char[] cbuf,int off,int len) throws IOExecption

该方法用于向数据源写入len个字符数据,并从数组cbuf的off位置开始。

●  public void write (String  str) throws IOExecption

该方法用于向数据源写入字符串。

●  public abstract void flush() throws IOExecption

刷新该输出流的缓冲,将缓冲的数据全部写入到数据源。

●  public abstract  void close() throws IOExecption

关闭此输出流,关闭之前需先调用flush()。

■ 知识点拨

流是一个抽象的概念,它代表一串数据的集合,当Java程序需要从数据源读取数据时,就需要开启一个到数据源的流。同样,当程序需要输出数据到目的地时,也需要开启一个流。流的创建是为了更方便地处理数据的输入和输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值