Java中的IO操作大体能分成两种:输出流和输入流,根据使用的流的方式,又可分为字符流和字节流。
1.读数据流
Reader和InputStream,它们都是抽象类,必须由其子类实例化。
实例化:FileReader和FileInputStream,其构造方法中传入路径参数。
方法:read();每次读取一个字节/字符
read(char []/byte []);每次读取一群字节/字符,需要提供一个"桶"来装数据
2.写数据流
Writer和OutStream
实例化:FileWriter和FileOutStream
方法:write():写入,写入的数据可以是一个/一群字符/字节
3. 缓冲流包装
使用缓冲流包装可以显著提高读写速度。
原因:在Java中,进行文件IO操作需要jvm通过系统调用实现内存中程序的数据与磁盘的交互。在这个过程中系统调用的次数越多耗时越大。缓冲流通过在内存中提供一个8KB的缓冲区实现降低系统调用的次数从而提升IO的速度。
方法:
javaReader reader = new FileReader(""); BufferedReader bufferedReader = new BufferedReader(reader); InputStream inputStream = new FileInputStream(""); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); Writer fileWriter = new FileWriter(""); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); FileOutputStream fileOutputStream = new FileOutputStream(""); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream)
4.性能
通过实践,发现当提供的"桶"容量越大,IO速度越快,但最终会趋于一个理想恒定值(再加大容量也不会显著提升),基于这一点,一个一个的字节/字符进行IO操作其效率非常慢故被抛弃,所以常使用缓冲流包装+较大的"桶"容量来实现IO操作。
原因:减少系统调用