所有Character Stream的类都继承类Reader 或 Writer。
对于Character Stream的类来说,其行为上类似于对Byte Stream的封装,在真正进行物理I/O操作是也是通过Byte Stream 与Character Stream之间的互相转换来实现的。
常用的Character Stream 类有 :
FileReader,FileWriter常用的构造方法 FileReader(String fileName),FileWriter(String fileName), 或者FileReader(File file),FileWriter(File file). 常用方法为 read() 和write(int c)
FileReader,FileWriter分别继承类InputStreamReader 和OutputStreamWriter 而这两个父类的构造方法的参数分别为字节流类型的InputStream 和OutputStream,所以也可以说Character Stream 是对Byte Stream的封装。
代码示例:
package io.characterstream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * IO Stream: * * 2.Character Stream. All Character Stream classes are descended from Reader and Writer. Java Platform stores character * values using Unicode convention。 Character Stream I/O automatically translates this internal format to and from the * local character set. * * @author PENGGR * */ public class CopyCharacters { public static void main(String[] args) { FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader("D:\\360云盘\\javase\\src\\io\\xanadu.txt"); outputStream = new FileWriter("D:\\360云盘\\javase\\src\\io\\characterStreamOut.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
此外,类BufferedReader,BufferedWriter是常用的Character Stream的Buffer,其构造方法为BufferedReader(Reader in ),BufferedWriter(Writer out) 常用方法为 readLine() write(String l).
代码示例:
package io.characterstream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class CopyLines { public static void main(String[] args) { BufferedReader inputStream = null; // PrintWriter outputStream = null; BufferedWriter bout = null; try { inputStream = new BufferedReader(new FileReader("D:\\360云盘\\javase\\src\\io\\xanadu.txt")); bout = new BufferedWriter(new FileWriter("D:\\360云盘\\javase\\src\\io\\characterLineOut.txt")); // outputStream = new PrintWriter(new FileWriter("D:\\360云盘\\javase\\src\\io\\characterLineOut.txt")); String l; while ((l = inputStream.readLine()) != null) { // outputStream.write(l); // outputStream.println(l); System.out.println(l); bout.write(l + "\n"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (inputStream != null) { inputStream.close(); } // if (outputStream != null) { // outputStream.close(); // } if (bout != null) { bout.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
此外,如果这段代码finally 里面的bout 对象没有被close,那么写入的文件中是看不到任何内容的,除非调用了flush方法把 字符流从内存写入到文件中。 此处想说的是character stream是在输出流关闭的时候或者缓存了足够大的容量的时候才把内容写到文件上,但是Byte stream 是实时写入文件的,所以,character stream的真正IO操作相对少一些,效率高一些。
相关推荐
此份所有内容皆出自我的偶像:林信良(良葛格)的Java 学习笔记,网址: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm<br>本人只是将其整理成适合手机阅读的格式。 此为第一版Java ...
JAVA学习笔记-java学习笔记WORD样式.docx
java学习笔记-Scokect.pdf
java学习笔记--PrintStream分享.pdf
Java学习笔记-Java后来者.exe
java学习笔记---从入门到精通之路.pdf
最全面的JAVA学习笔记
java学习笔记-基础学习,一些关键和要点
zookeeper云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-...
嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 ) 叙述了我从小白到入门过程中遇到的问题以及解决方法(2018更新版)。
Python学习笔记--皮大庆,非常适合零基础入门。对应英文版本《How to think like a computer scientist》
Java笔记---李兴华---Java笔记---李兴华-----Java笔记---李兴华--Java笔记---李兴华
JAVA学习经典笔记-----1JAVA学习经典笔记-----1JAVA学习经典笔记-----1JAVA学习经典笔记-----1JAVA学习经典笔记-----1
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
《java学习》--java学习笔记 《java学习》--java学习笔记 《java学习》--java学习笔记