NIO缓冲流(过滤流)原理关系图
N.1 节点流(字符流与过滤流)和过滤流
1)直接和数据源(文件,内存块,网络)相连接的流是节点流,否则就是过滤流。过滤流相当于在节点流上加了一个流。 |
————————————————————————
————————————————————————
————————————————————————
N.2.1 节点流
1)FileReader:以字符读文件。 2)FileWriter:以字符写文件。 3)FileInputStream:以字节读文件。 4)FileOutputStream:以字节写文件。 5)CharArrayReader:以字符读取字符数组 6)CharArrayWriter:以字符写入字符数组 7)StringReader:以字符读取字符串 8)StringWriter:以字符写入字符串 9)ByteArrayInputStream:以字节读取字节数组 10)ByteArrayOutputStream:以字节写入字节数组 11)ObjectInputStream:以字节读取对象 12)ObjectOutputStream:以字节写入对象。 |
N.2.2 NIO过滤流
1)BufferedReader:以字符读缓冲区。 2)BufferedWriter:以字符写缓冲区。 3)BufferedInputStream:以字节读缓冲区。 4)BufferedOutputStream:以字节写缓冲区。 5)InputStreamReader:字节输入流转换为字符输入流。 构造方法:InputStreamReader(InputStream in, Charset cs) 6)OutputStreamWriter:字符输出流转换为字节输出流。 OutputStreamWriter是过滤流,作用就是,缓冲区和调节编码格式等的好处。 7)构造方法:public OutputStreamWriter(OutputStream out,Charset cs) 8)字符缓冲流 |
import java.io.*; public class test { public static void main(String[] args) throws IOException { //装饰者模式 FileReader fr = new FileReader ("E:/test/abc/Day2001. java"); //将fr包装成为一个缓冲过滤流 BufferedReader br = new BufferedReader (fr); FileWriter fw = new FileWriter("E:/test/abc/Day2001副本. java"); BufferedWriter bw = new BufferedWriter (fw); int b = 0; //保存读到的字符 // read方法每次读取一个字符,如果读到了文件的未尾则返回-1 while (-1 != (b = br. read())) {//将字符写入输出流 bw.write(b); } //close方法内部会调用flush方法 //close方法内部会调用节点流的close方法 br.close(); bw.close(); } } |
9)字节缓冲流 转 字符缓冲流 |
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; public class test { public static void main(String[] args) throws IOException { //装饰者模式 FileInputStream fis = new FileInputStream("E:/test/abc/Day2001. java");//把一个字节输入流,转换为字符输入流,使用GBK字符集 //构造器: InputStreamReader (InputStream in, Charset cs) // Charset forName (String charsetName)方法 InputStreamReader isr = new InputStreamReader(fis, Charset. forName ("GBK")); // 将fr包装成为一个缓冲过滤流 BufferedReader br = new BufferedReader (isr); int b = 0;// 保存读到的字符 // read方法每次读取一个字符,如果读到了文件的末尾则返回-1 while (-1 != (b = br. read())) { //将字符写入输出流 System.out. print((char) b); } // close方法内部会调用flush方法 // close方法内部会调用节点流的close方法 br.close(); } } |