IO流

PrintWriter   PrintWriter(OutputStream out, boolean autoFlush)   通过现有的 OutputStream 创建新的 PrintWriter。

在没有刷新前,写入的数据并没有真正的写入文件,只是保存在内存中,刷新后才会写入文件,如果程序中没有调用刷新方法,当程序执行完成时会自动刷新,也就是只有到数据全部执行完才会一次性写入,大数据量时对运行效率有影响,创建不具有自动刷新的对象,就是用这个对象写入数据时不会自动刷新。

1.InputStream、OutputStream        处理字节流的抽象类

   InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.

   OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等

2.InputStreamReader  OutputStreamWriter      处理字符流的抽象类

   InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流

   OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流

3.BufferedReader BufferedWriter

   BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

  BufferedWriter  由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

      Java IO系统里读写文件使用Reader和Writer两个抽象类,Reader中read()和close()方法都是抽象方法。Writer中 write(),flush()和close()方法为抽象方法。子类应该分别实现他们。
     Java IO已经为我们提供了三个方便的Reader的实现类,FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader, 它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等

     FileReader读txt文件例子
    FileReader fr = new FileReader("D:/Test.txt"); 
    int ch = 0;   
    while((ch = fr.read())!=-1 ){   
        System.out.print( (char)ch );   
    }   
其中read()方法返回的是读取得下个字符。

FileInputStream与BufferedInputStream区别:

 FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现阻塞;

FileInputStream与FileReader区别:

FileInputStream是字节流,FileReader是字符流,用字节流读取中文的时候,可能会出现乱码,而用字符流则不会出现乱码,而且用字符流读取的速度比字节流要快;

ObjectOutputStream与ByteArrayOutputStream的区别:

ObjectOutputStream可以将java对象写入outputstream流中(序列化),然后进行持久化,此对象必须是实现了java.io.Serializable 接口;

ByteArrayOutputStream是将数据写入byte数组中;

读写操作详解:http://blog.csdn.net/djun100/article/details/25642939

  

原文地址:https://www.cnblogs.com/sam-cheng/p/7088067.html