io系列之常用流一
一、 读取键盘录入和数据打印
在System类中,
System.out: 对应的是标准输出设备(控制台)(一个PrintStream)。
System.in: 对应的是标准输入设备(键盘)(一个InPutStream)。
由System.in的定义可知 :public static final InputStream in : in属性本身是一个字节输入流对象,
可有: InputStream in = System.in;
其read方法是读入一个从键盘上输入的字节。
由System.out的定义可知 :public static final PrintStream out:out本身就是一个字节输出流对象,
可有: PrintStream out = System.out;
其write方法是将一个字节打印到控制台上。
另外: System.setIn :重新分配标准输入流
System.setOut :重新分配标准输出流
二、打印流
该流提供了打印方法,可以将各种将各种数据类型都原样打印。
字节打印流:
PrintStream
构造函数可以接受的参数类型:
1,File对象: File 同时传入字符集名称可指定编码表
2,字符串路径: String 同时传入字符集名称可指定编码表
3,字节打印流: OutPutStream 同时传入True,可让println方法自动刷新
字符打印流:
PrintWriter
构造函数可接受的参数:
1,File对象: File 同时传入字符集名称可指定编码表
2,字符串路径:String 同时传入字符集名称可指定编码表
3,字节打印流:OutPutStream 同时传入True,可让println方法自动刷新
4,字符打印流:Writer 同时传入True,可让println方法自动刷新
他们中都有一个特有的输出方法:print and println
三、读取转换流
InputStreamReader ,将一个输入字节流,转换成一个输入字符流。(字节流到字符流的桥梁)
构造方法:
InputStreamReader(InputStream in) 传入一个输入字节流对象,创建一个使用默认字符集的 InputStreamReader
InputStreamReader(InputStream in, Charset cs) 传入一个输入字节流对象,创建使用给定字符集的 InputStreamReader
InputStreamReader(InputStream in, CharsetDecoder dec) 传入一个输入字节流对象, 创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStream in, String charsetName) 传入一个输入字节流对象, 创建使用指定字符集的 InputStreamReader
键盘行录入的使用示例:BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
四、输出转换流
OutputStreamWriter:将一个输出字节流,转换成一个输出字符流。(字符流到字节流的桥梁)
构造方法:
OutputStreamWriter(OutputStream out) 传入一个输出字节流对象,创建使用默认字符编码的 OutputStreamWriter
OutputStreamWriter(OutputStream out, Charset cs) 传入一个输出字节流对象,创建使用给定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 传入一个输出字节流对象,
创建使用给定字符集编码器的 OutputStreamWriter
OutputStreamWriter(OutputStream out, String charsetName) 传入一个输出字节流对象,创建使用指定字符集的 OutputStreamWriter
字符和字节之间的桥梁,一般,涉及到字符编码转换时,需要用到转换流(同时打印流也可以指定编码表)。
五、序列流
SequenceInputStream(InputStream的子类)
将装在集合中的InputStream对象按照顺序打印到指定的文件中(该集合必须具备Enumeration)
构造方法:
SequenceInputStream(Enumeration<? extends InputStream> e)
SequenceInputStream(InputStream s1, InputStream s2)
文件切割: Java中没有提供该方法,但是我们可以自己实现。
思想: 使用一个数组来从源文件中读取数据, 每次将数据存入目的文件(碎片文件)1中,当该文件中存到规定容量时,
让下一次数组中的数据存入目的问件(碎片文件)2中,当此文件也满时,存入三中,直到源文件数据被取完。