这段时间学习JAVA的流类,感觉各种流五花八门看得眼花,特此简单整理。
JAVA的I/O流库提供大量的流类(java.io)。其中,所有输入流是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类,而所有的输出流类都是抽象类OutputStream(字节流)和抽象类Write(字符流)的子类。
字节流:
- FileInputSrteam
功能为从文件中以字节的形式读取数据,利用 .read()方法将读取的字节返回,终止标志为-1返回值。
- FileOutputstream
功能为将内存中的数据以字节流的形式送到目标文件,利用 .write(byte [] b)方法输送字节到数组b,
- System.in
一个很原始的字节流(个人感情因素。。。),是System的一个类成员,原型为
public final static InputStream in = nullInputStream();
指向的源为标准输入:键盘
- System.out
同样是一个很原始的字节流。。。。
public final static PrintStream out = nullPrintStream();
输出的目的地是屏幕文本
字符流:
字节流本身的局限性是不能直接操作Unicode字符,例如汉字是占用两个字节空间,使用字节流读取不当有可能发生乱码现象。因此JAVA提供了比较高级的字符流来处理,在Unicode中一个汉字占据一个字符,因此可以保证正确处理。
- FileReader
抽象类Reader的子类,从制定目标按字符读取数据,顺序读取文件中的字符直至流关闭。
public class FileReader extends InputStreamReader
- FileWrite
抽象类Write的子类,以字符形式输送数据到目的地直至流关闭。
public class FileWriter extends OutputStreamWriter
-------------------------------------------------------------------------------------
System.in是指向键盘的字节输入流,如果我们需要从键盘读取字符,可以在.in流上“套一根管子”。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 利用.in来构造一个字符流的“管子”。这样从键盘就能以字符的形式读入数据。