总体结构图
一.字节流和字符流的异同:
1 字节流是一个字节一个字节的读取数据。而字符流是一次读取一个或者多个字节时,先去查指定的编码表(UTF-8,GBK),然后再将字符返回。
2 字节流可以处理所有的数据类型(图片,音频,AVI视频...)。字符流只能处理字符数据。所以,处理纯文本数据的时候,优先考虑使用字符流,除此之外,都使用字节流。
二.IO流大体可分为节点流和处理流:
1 节点流:可以从固定的地方或者节点来读取数据
File: FileReader,FileWriter。(字符流)
FileInputStream,FileOutPutStream。(字节流)
String:StringReader,StringWriter。(字符流)
....
2 处理流:对一个已经存在的流进行连接和封装,通过封装的流进行数据的读写操作。处理流的构造方法总是要带一个其他的流作为它的参数。一个流对其他流进行的多次包装也叫做流的链接。具体有:
2.1 缓冲流:
字节流:BufferedInputStream,BufferedOutPutStream。字符流:BufferedWriter,BufferedReader。
(字节流同理)字符流 写入: BufferedWriter bufw = new BufferedWriter(new FileWriter("test.txt"));( 字节流同理) 字符流读取: BufferedReader buff = new BufferedReader(new FileReader("test.txt"));
该类型的流有一个特有的方法:readLine();一次读一行,读到行标记时,将行标记之前的字符数据作为字符串进行返回,读到末尾时,返回NULL
2.2 转换流:
该类型是字符流和字节流的桥梁。该流的对象可以对读取数据的字节流按照设定的编码进行转换。
读取流: (默认编码) InputStreamReader(new InputStream)(设定编码) InputStreamReader(new InputStream,String charSet)写入流: (默认编码) OutputStreamWriter(new OutputStream)(设定编码) OutputStreamWriter(new OutputStream,String charSer)比较: (默认编码) FileReader fr = new FileReader("test.txt"); ==== InputStreamReader isr = new InputStreamReader(new FileInputStream("test.txt"));(设定编码) FileReader fr = new FileReader("test.txt"); ==== InputStreamReader isr = new InputStreamReader(new FileInputStream("text.txt"),String charSet);
2.3 数据流:
该类型直接对一些基本类型的数据进行存储和读取,不需要进一步的住转换。
读取:DataInputStream(InputStream)
写入:DataOutputStream(OutputStream)
2.4 打印流:
PrintStream:是一个字节打印流接受3种数据类型的值:1.字符串类型 2.File对象 3.OutputStream
PrintWriter:是一个字符打印流接受4种数据类型的值: 1.字符串类型 2.File对象 3.OutpStream 4.Writer
2.5 对象流:
常用于try catch。