天天看点

(九)字符输入流/输出流

  1. CharArrayReader/CharArrayWriter与ByteArrayInputStream/ByteArrayOutputStream原理类似,不涉及真正的I/O操作,对内部提供一个char数组,所有读/写操作都针对这个数组进行。
  2. BufferedReader与BufferedWriter与BufferedInputStream/BufferedOutPutStream原理类似,构造函数需要一个字符输入/输出流作为入参。内部以一个字符数组作为缓存,将底层输入/输出流的数据一次性读取到缓存数组中
  3. FileReader 与FileWriter是针对文件的字符输入/输出流,FileReader只是InputStreamReader的子类,FileWriter只是OutputStreamWriter的子类,其本身并没有任何特殊实现,字符的输入/输出都是靠父类实现的
  4. PrintWriter提供了对输出内容的格式化。

      a. 对于构造函数传入的OutputStream实例,最后会被封装成

    new BufferedWriter(new OutputStreamWriter(out)

      b.对于传入的File实例或者fileName,最后会被封装成

    new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName)

      c. 对于字符集的指定都是靠OutputStreamWriter完成的

      e. 不会抛出异常,异常将在内部被捕获并标记,通过checkError()可以判断是否出现异常。

      f. 因为使用BufferedWriter,所以输出的数据会放在缓存中,不会马上输出。

      g. println()函数的实现是将输出分为两部分:输出字符;输出换行。通过synchronized保证原子性。  

public void println(float x) {
        synchronized (lock) {
            print(x);
            println();
        }
    }