Java的io用了很久,但还是感觉用的时候有点卡手,发现问题在节点流和处理流的分类上,现在做个总结。

 

 

         在使用io的时候,应该优先考虑用什么节点流,下图是不同类型的节点流:

 

总结:

         1.在读写一个文件的时候,优先想到File打头的流:FileInputStream/FileOutputStream,FileReader/FileWriter

         2.ByteArrayInputStream和ByteArrayOutputStream读取的是一个内存数组。在创建ByteArrayInputStream的时候会创建一个数组,如果没有指定数组大小的话默认是32。

         3.常用的能够套接在InputStream/OutputStream上的处理流有:

         ObjectInputStream/ObjectOutputStream,注意序列化接口和transient

         InputStreamReader/OutputStreamWriter,

         BufferedInputStream/BufferedOutputStream,

         DataInputStream/DataOutputStream

         4.常用的能够套接在Reader/Writer上的处理流有:

         BufferedReader/BufferedWriter。

         BufferedReader提供了readLine方法用于读取一行字符串(换行 ('\n')、回车 ('\r') 或回车后直接跟着换行)。

         BufferedWriter提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。

         推荐在Reader/Writer上都套接BufferedReader/ BufferedWriter,可以提高效率。

         5.打印流PrintStream/PrintWriter都是输出流,它们比较特殊,既可以直接读取节点(数据源),也可以读取流。

         PrintStream的构造方法有:

                  PrintStream(File file)

       PrintStream(String fileName)

                  PrintStream(OutputStream out)

         PrintWriter的构造方法有:

                   PrintWriter(File file)

        PrintWriter(String fileName)

                   PrintWriter(OutputStream out)

                   PrintWriter(Writer out)