「Java」「JAVA」字节流、字符流、缓冲流、转换流、内存流、字符编码( 二 )



文件流、字节流、字符流、缓冲流、转换流、内存流
文件流: 在Java 中 , 文件流负责操作文件 , 包括读取和写入;

  • FileInputStream        // 文件的字节输入流;
  • FileOutputStream     // 文件的字节输出流;
  • FileReader                 // 文件的字符输入流;
  • FileWriter                  // 文件的字符输出流;

FileInputStream 和 FileOutputStream的父类分别是InputStream和OutputStream , 都是字节流 , 以面向字节的形式提供IO操作 。 FileReader 和 FileWriter的父类则是Reader和Writer , 都是字符流 , 字符流以面向字符提供IO操作 , 同时 , 字符流兼容Unicode , 能够提供更好的国际化支持 。
在读取数据时 , 字节流的数据存储单位是字节 , 在接收字节流数据时 , 会新建一个字节类型的数组(byte[
)来接收读取的数据;字符流的数据存储单位是字符 , 在接收字符流数据时 , 会新建一个字符类组(char[
)的数据来接收读取的数据 。
InputStream 和 OutputStreamInputStream:
InputStream及其子类的作用是用来表示不同数据源输入数据的类 , 其中封装了用于从数据源中读取数据的操作 。 这些数据源包括:
  • 字节数组:byte[

  • String对象;
  • 资源文件:File;
  • 资源管道;
  • 其他流组成的流序列;
  • 其他数据源 , 如网络资源;
InputStream子类:
  • ByteArrayInputStream:将内存的缓冲区当作数据源输入;
  • StringBufferInputStream:将String转换成InputStream;
  • FileInputStream:从本地文件中读取数据;
  • PipedInputStream:资源管道的输入端 , 也是PipedOutputStream的输入源;
  • SequenceInputStream:能够将2个或者以上的InputStream合并成一个单一的InputStream;
  • FileterInputStream:为文件资源读取提供筛选功能;
OutputStream:
OutputStream及其子类的作用是用来表示数据输出将要去向的目标 , 比如:文件、资源管道、字节数组等 。 OutputStream也是因不同的目标有不同的子类:
  • ByteArrayOutputStream:在内存中创建缓冲区 , 所有输出的数据都会暂存在缓冲区中;
  • FileOutputStream:将数据写出到文件中;
  • PipedOutputStream:作为PipedInputStream的输出端 , 与PipedInputStream一起实现资源的“管道化”;
  • FileterOutputStream:为文件资源写出提供筛选功能;
Reader 和 Writer字符流有着和字节流近乎一样的功能 , 每个字节流api都能在字符流中找到与之相对应的 , 而且 , 字符流比字节流有着更好的性能;尽管如此 , 字符流的设计并不是为了取代字节流 , 相反 , 二者同时存在 , 相辅相成 。
Reader 和 Writer及其子类都提供了对Unicode的支持 , 这是他们和InputStream与OutputStream系拓展最大的不同 , 详细如下图所示:
字节流和字符流的api对应
文件过滤器Java IO中提供了过滤器:FilterInputStream和FilterOutputstream , 用于筛选特定的输入流和输出流 。 因为FilterInputStream和FilterOutputstream也是自InputStream与OutputStream继承而来 , 所以他们都可以读写来自InputStream与OutputStream的数据 。


推荐阅读