输入输出流

 

   |------> 字节流
        |----------> OutputStream 字节输出流
                |---------->FileOutputStream 文件字节输出流
                |---------->ByteArrayOutputStream 字节数组输出流
                |---------->pipedOutputStream  管道输出流
                |---------->ObjectOutputStream 对象输出流
                |---------->FilterOutputStream 字节输出过滤流
                        |---------->DataOutputStream 基本数据输出流
                        |---------->BufferedOutputStream 字节输出缓冲流
                        |---------->PrintStream 打印字节流
        |----------> inputStream  字节输入流
                |---------->FileInputStream  文件字节输入流
                |---------->ByteArrayInputStream 字节数组输入流
                |---------->pipedInputStream  管道输入流
                |---------->ObjectInputStream 对象输入流
                |---------->SequenceInputStream 合并流
                |---------->FilterInputStream  字节输入过滤流
                        |---------->DataInputStream 基本数据输入流
                        |---------->BufferedInputStream  字节输入缓冲流

 

    |------> 字符流                    
        |----------> Writer 字符输出流(写入)
                |---------->BufferedWriter 字符缓冲输出流(用于包装Writer子类提供缓冲功能)
                |---------->CharArrayWrite 字符数组输出流
                |---------->PrintWriter 打印字符流
                |---------->OutputStreamWriter 字符换字节转输出流
                        |---------->FileWriter 文件字符输出流
        |----------> Reader 字符输入流(读取)
                |---------->BufferedReader 字符缓冲输入流(用于包装Reader子类提供缓冲功能)
                        |---------->LineNumberReader 增加行号跟踪
                |---------->CharArrayReader 字符数组输入流
                |---------->InputStreamReader  字节换字符转输入流
                        |---------->FileReader 文件字符输入流


|------------------------------------->   RandomAccessFile 拥有文件指针的字节输入输出封装类


  流本身可看做是一个缓冲区,流的出现是为了优化数据在内存中进出的效率,所以输出与输入两词均是相对于内存而言,即输出是将数据从内存输出到指定位置,输入即是从指定位置的源将数据装载进内存。


--字节流--

* OutputStream:
  输出字节流的抽象类。提供了输出流必要的资源回收close,输出字节数组或单个字节write方法。

* InputStream: 
  输入字节流的抽象类。提供了输入流必要的资源回收close,读入字节数组或单个字节的read方法。


* FileOutputStream:
  将内存数据以字节形式输出到文件,构造函数提供了根据文件对象File或直接根据文件完整路径名创建对象。参数2指定是否续写文件。

* FileInputStream: 
  将文件数据以字节形式输入到内存,构造函数提供了根据文件对象File或直接根据文件完整路径名创建对象。


* ByteArrayOutputStrea:
  提取内存byta数组内容写入到内置的缓冲数组中,该内置缓冲数组随数据自动延长。size方法可以获取当前缓冲区拥有的长度,然后通过toByteArray或toString获取该缓存区中的所有数据。换句话就是将多个byte数组连接在了一起。因为对象操作的都为内存数据,所以不需要close回收资源。writeTo方法可以将缓存区中的内容输出到另一个OutputStream输出字节流中。

* ByteArrayInputStream:
  构造时指定一个byta数组为该流的数据读取源,使用read方法可以将byta数组中的数据读出,换句话说也就是将一个大的byta数组按不同的需求逐段提取。因为对象操作的都为内存数据,所以不需要close回收资源。


* pipedOutputStream:
  将指定的byte数据输出到一个与pipedInputStream类对象连接的管道流中。须要配合pipedInputStream使用。在构造时可以指定管道接收端的pipedInputStream对象,也可以在对象建立后使用connect方法手动建立pipedInputStream的对应关系。

* pipedInputStream:
  读取与已连接pipedOutputStream管道流中的数据,该类成员read具有阻塞特性,为了保证read执行时后还可以使用pipedOutputStream将数据写入到管道,pipedOutputStream与pipedOutputStream应该不存在于同一个线程内,该组对象多用于不同线程有条件的数据分发。在构造时可以指定管道接收端的pipedInputStream对象,也可以在对象建立后使用connect方法手动建立pipedInputStream的对应关系。


* ObjectOutputStream:
  将内存实例对象以二进制数据的形式写入到一个构造时指定的OutputStream对象中。然后可以通过该OutputStream对象再将数据输出到其它设备,如文件等。被写入的对象必须已经implements Serializabler接口,该接口内包含一个static final long serialVersionUID静态常量数据成员,用于标记该类。被写入的类中静态成员以及被标记为transient的成员不会被写入。

* ObjectInputStream:
  可以读取到一个InputStream流中的二进制对象数据,该数据必须是由ObjectOutputStream写入进去的。该组对象用于对象的序列化储存,即将内存数据到硬盘数据的转换。回想C++中将一个对象写入到硬盘,仅仅只需要取对象的首地址与对象的长度,将该长度内存处的数据输出到硬盘即可。从这里也可以看出Java将很多功能化更细节的封装,不仅仅是弥补剔除指针的足,也同时让功能更具体实例化。


* SequenceInputStream:
  可以将多个InputStream对象合并为一个,通过将多个InputStream对象装入到一个Enumeration中完成。实现多个数据来源连续不间断的读取。

 

以下为字节过滤类


* DataOutputStream:
  构造时关联一个OutputStream对象,该类重载了多种基本类型数据的write方法,用于将基本数据原样写入到关联的OutputStream对象流中。

* DataInputStream:
  构造时关联一个InputStream对象,该类重载了多种基本类型数据的read方法,用于从InputStream对象流中读取基本数据类型。


* BufferedOutputStream:
  构造时可以指定一个OutputStream对象,为该字节输出对象流增强缓冲效果,并且在构造时可以指定缓冲区的大小。当指定OutputStream对象有数据输出到指定目的时,数据会被寄存在该缓冲区中,直到缓冲区填满,或是使用flush方法刷新,或是close方法结束时,数据才会送向目的处。所以缓冲区大小应该至少大于每次write的字节数,否则缓冲效果失效。

* BufferedInputStream:
  构造时可以指定一个InputStream对象,为该字节输入对象流增强缓冲效果,并且在构造时可以指定缓冲区的大小。当调用read类方法时,指定的InputStream对象最大限度的从源将数据读入到缓冲区中,后续的read方法被调用时,如果该缓冲区中仍然存在数据,那么直接从缓冲区中获取,直到缓冲区数据被read方法读取完,再一次从源将新的数据写入到该缓冲区,所以缓冲区大小应该至少大于每次read的字节数,否则缓冲功能失效。


* PrintStream:
  该类封装于OutputStream类,提供了更为人性化的字节输出方式,多种print与println重载方法用于直接打印各种类型的数据,在构造的时候可以直接关联一个文件或是一个OutputStream对象流。


默认标准输入流System.in静态成员记录一个InputStream对象,可以通过该对象的read()方法获取键盘录入,如:

byte[] buffer = new byte[1024];                           //存放接收到的字节
BufferedInputStream bis = new BufferedInputStream(System.in);  //使用字节缓冲区包装System.in返回的IntputStream字节输入流对象
bis.read(buffer, 0, 1024);                                //通过read方法将IntputStream流中的数据写入到数据中
System.out.println(new String(buffer));                //将数组内的字节码以默认编码表转换为字符并存入String打印



  默认标准输入流System.cout 静态成员记录一个PrintStream对象,该类对象拥有多种print重载方法,用于将流中内容输出到指定设备上,该类的基类是FilterOutputStream过滤流。可以通过setIn setOut修改默认的输出输入设备,如:

PrintStream ps = new PrintStream("文件完整路径名");   //创建新的PrintStream对象,并且关联文件。
System.setOut(ps);                                    //将该对象设置为默认的标准输出设置
System.out.println(12345);                           //内容12345将被输出到PrintStream对象对应的文件中


 
--字符流--


* Writer:
  输出字符流的抽象类。提供了输出流必要的资源回收close,刷新缓冲flush,输出字符数组或单个字符或String的write方法,

* Reader:
  输入字符流的抽象类。提供了输入流必要的资源回收close,读入字符数组或单个字符或String的read方法。


* BufferedWriter:
  专用于字符输出流缓冲,构造时必须指定一个关联的字符输出流对象,可以通过第二个参数指定缓冲区的大小。提供了一个额外的newLine方法,写入一个换行(兼容多系统平台)。

* BufferedReader:
  专用于字符输入流缓冲,构造时必须指定一个关联的字符输入流对象,可以通过第二个参数指定缓冲区的大小。供了一个额外的readLine读取一行数据并返回它,但不包含换行符。如果已达文件尾返回null。另外该类还派生了一个LineNumberReader类,除了基类的功能外多增加了一个行号跟踪功能getLineNumber获取行号,返回当前行号char字符的整数表现形式,setLineNumber使用参数设置开始行号。


* CharArrayWrite:
  提取内存char数组内容写入到内置的缓冲数组中,该内置缓冲数组随数据自动延长。size方法可以获取当前缓冲区拥有的长度,然后通过toCharArray或toString获取该缓存区中的所有数据。换句话就是将多个char数组连接在了一起。因为对象操作的都为内存数据,所以不需要close回收资源。writeTo方法可以将缓存区中的内容输出到另一个writer输出字符流中。

* CharArrayReader:
  构造时指定一个char数组为该流的数据读取源,使用read方法可以将char数组中的数据读出,换句话说也就是将一个大的char数组按不同的需求逐段提取。因为对象操作的都为内存数据,所以不需要close回收资源。


* PrintWriter:
  该类封装于Writer类,提供了更为人性化的字符输出方式,多种print与println重载方法用于直接打印各种类型的数据,在构造的时候可以直接关联一个文件或是一个OutputStream对象流。


* OutputStreamWriter: 
  该类对象在构造的时候接收一个OutputStream对象,可以将字符流转换为字节数据输出,同时在构造的时候可以指定编码表Charset也可以直接使用String型参数指定编码名。getEncoding返回此流使用的字符编码的名称。

* InputStreamReader: 
  该类对象在构造的时候接收一个InputStream对象,可以将字节流转换为字符数据读取,同时在构造的时候可以指定编码表Charset也可以直接使用String型参数指定编码名。getEncoding返回此流使用的字符编码的名称。


* FileWriter:
  采取系统默认字符编码表,专用于对字符数据的文件写入操作,对象与文件之间冲在着唯一性,构造函数提供了根据文件对象File或直接根据文件完整路径名创建对象。参数二用来指定打开方式为重建还是续写。

* FileReader:
  采取系统默认字符编码表,专用于对字符数据的文件读取操作,对象与文件之间冲在着唯一性,构造函数提供了根据文件对象File或直接根据文件完整路径名创建对象。


* RandomAccessFile:
  该类直接派生自Object,内部封装了字节输出与输入流,并且提供了文件指针的功能。在构造的时候必须指定一个文件源,通过seek方法移动当前文件指针的位置,可对文件内数据做精细操作,但可惜没有向上移动指针的功能。
  该类中重载了多种write与read方法,用于对不同的数据类型的写入到文件与从文件读取操作,方便于编辑各种数据的文件。另外可以通过构造时的第二个参数指定其读写权限,更多权限参照Java API。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值