java输入输出流

按照处理的数据单位分为字节流和字符流

  •  字节流:操作的数据单元是8位的字节。InputStream、OutputStream作为抽象基类。
  •  字符流:操作的数据单元是字符。以Writer、Reader作为抽象基类。
  •  字节流可以处理所有数据文件,若处理的是纯文本数据,建议使用字符流。

IO流中的三类数据源:

  • 基于磁盘文件:FileInputStream、FileOutputSteam、FileReader、FileWriter
  • 基于内存:ByteArrayInputStream ByteArrayOutputStream(ps:字节数组都是在内存中产生)
  • 基于网络:SocketInputStream、SocketOutputStream(ps:网络通信时传输数据)

根据流的作用可分为节点流和处理流

  • 节点流:程序直接与数据源连接,和实际的输入/输出节点连接;处理流:对节点流进行包装,扩展原来的功能,由处理流执行IO操作。
  • 处理流的作用和分类:
  1. 处理流可以隐藏底层设备上节点流的差异,无需关心数据源的来源,程序只需要通过处理流执行IO操作。处理流以节点流作为构造参数。通常情况下,推荐使用处理流来完成IO操作。

  2. 缓冲流:提供一个缓冲区,能够提高输入/输出的执行效率,减少同节点的频繁操作。例如:BufferedInputStream/BufferedOutputStream、BufferedReader/BufferWriter
  3. 转换流:将字节流转成字符流。字节流使用范围广,但字符流更方便。例如一个字节流的数据源是纯文本,转成字符流来处理会更好。InputStreamReader/OutputStreamWriter
  4. 打印输出流:打印输出指定内容,根据构造参数中的节点流来决定输出到何处。
         PrintStream :打印输出字节数据。
         PrintWriter :打印输出文本数据。

 FileInputStream 与BufferedInputStream 对比:

        FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节,执行read时先从缓冲区读取,当缓冲区数据读完时再把缓冲区填满。),因此,当每次读取的数据量很小时,FileInputStream每次都是从硬盘读入,而BufferedInputStream大部分是从缓冲区读入。读取内存速度比读取硬盘速度快得多,因此BufferedInputStream效率高,且FileInputStream对象的read方法会出现阻塞;BufferedInputStream的默认缓冲区大小是8192字节。当每次读取数据量接近或远超这个值时,两者效率就没有明显差别了。BufferedOutputStream和FileOutputStream同理,差异更明显一些。  

你可能感兴趣的:(Java基础)