Java IO

按照功能分成下面几类

  1. 基于字节操作的I/O接口:InputStream 和 OutputStream
  2. 基于字符操作的I/O接口:Reader 和 Write
  3. 基于磁盘操作的I/O接口:File

基于字节操作的I/O接口

读取和写入的单位是字节, byte[],8字节

InputStream 的主要实现类是

  • FileInputStream:读取直接使用 native read 方法,读取磁盘文件的字节
  • ByteArrayInputStream:读取的内容是初始化的ByteArray
  • BufferedInputStream:设置一个Buffer,写读取到buffer中的数据,如果数据不够,然后从构造的InputStream中读取,默认buffer是 8192,如果FileInputStream设置读取byte大小和8192一致,效率和FileInputStream一致
  • ObjectInputStream:主要用作对象的序列化
  • PipedInputStream:主要结合PipeOutputStream使用,实现线程间通信,设置有缓冲区,PipedOutputStream直接写入到 InputStream的缓冲区中
  • SequenceInputStream:合并业务流的数据,2个或者多个InputStream
  • DataInputStream:结构数据读取,支持的boolean, Byte, UnsignedByte, Short, UnsignedShort, Char, Int, Long, Float, Double, Line, UTF

OutputStream 主要的实现类

  • FileOutputStream:读取直接使用 native write 方法,写入磁盘文件的字节
  • ByteArrayOutputStream:把数据写入到buffer中,可以转换成String方法
  • BufferedOutputStream:设置一个Buffer,数据先写入到buffer中,如果buffer满了,把buffer中的数据写入到OutputStream中,默认buffer是 8192,如果FileOutputStream设置读取byte大小和8192一致,效率和FileInputStream一致
  • ObjectOutputStream:写出序列化结构,需要关注Bits这个类以高字节序编码
  • PipedOutputStream:构造需要传入PipedInputStream,
  • SequenceOutputStream:合并业务流的数据,2个或者多个InputStream
  • DataOutputStream:结构数据读取,支持的boolean, Byte, UnsignedByte, Short, UnsignedShort, Char, Int, Long, Float, Double, Line, UTF

基于字符的I/O接口

磁盘或者网络的传输,最小的存储单元是字节,同时又提供了字符的操作,字节到字符必须要经过编码。读取和写入的单位是char[], 16字节

Reader的主要实现类

  • InputStreamReader:通过设置StreamDecoder根据设置的字符集实现字节编码
  • FileReader:使用FileInputStream作为文件读取,不能设置编码
  • BufferREader:设置一个缓冲区8192,数据读取到缓冲区,然后在返回
  • CharArrayReader:设置一个Char,然后进行读取,支持重复读
  • LineNumberReader:可以记录读取行数的功能
  • PipedReader:和PipedWriter结合使用,实现线程间通信
  • PushbackReader:

Leave a Reply

Your email address will not be published. Required fields are marked *