一、步骤:
创建源 选择流 操作(读取|写出) 释放
二、流
节点流: 离数据源|程序最近的流
处理流: 装饰模式 提高性能增强功能
1、 字节流: 可以处理一切(纯文本、音频、视频等)
1)、输入流 InputStream:FileInputStream ByteArrayInputStream
操作: read(字节数组)
a)、中间容器 byte[] flush=new byte[长度]
b)、接收长度 int len =0;
c)、循环读取 while(-1!=(len=流.read(flush))){}
d)、操作:输出、拷贝
2)、输出流 OutputStream:FileOutputStream ByteArrayOutputStream
操作: write(字节数组,0,长度) 输出
2、 字符流:只能处理纯文本
1)、输入流:Reader:FileReader
操作: read(字符数组)
a)、中间容器 char[] flush=new char[长度]
b)、接收长度 int len =0;
c)、循环读取 while(-1!=(len=流.read(flush))){}
d)、操作:输出、拷贝
2)、输出流:Writer:FileWriter
操作: write(字符数组,0,长度) 输出
3、 转换流:解码与编码字符集问题
1)、输入流:InputStreamReader 【<—— 从里到外读,把输入的字节流解码成字符流】
BufferedReader reader = new BufferedReader( new InputStreamReader(new URL("http://www.baidu.com").openStream(),"UTF-8"));
2)、输出流:OutputStreamWriter【从外到里 写——>,把字符流编码成字节流输出到控制台或硬盘】
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("baidu.html"),"UTF-8"));)
4、缓冲流:提高性能
1)、输入流:BufferedInputStream BufferedReader
2)、输出流:BufferedOutputStream BufferedWriter
5、数据流:处理数据+类型
1)、基本+字符串:必须存在才能读取 读取与写出顺序一致
a)、输入流:DataInputStream readXxx
b)、输出流:DataOutputStream writeXxx
2)、引用类型:Serializable transient
a)、反序列化:ObjectInputStream readObject
b)、序列化:ObjectOutputStream writeObject
6、打印流: PrintStream
import java.io.BufferedOutputStream; import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; public class TestPrintStream { public static void main(String[] args) throws FileNotFoundException { PrintStream ps = System.out; //默认打印到控制台 ps.println("控制台-28哈哈"); ps.println("控制台-"+123); //重新定义输出流 ps = new PrintStream(new BufferedOutputStream(new FileOutputStream("print.txt")),true); //true表示自动刷新 ps.println("从这里开始打印到文件"); ps.println(false); // ps.close(); System.out.println("这里还是打印到控制台"); System.out.println(); //重定向输出端 System.setOut(ps); System.out.println("这是重定向打印"); System.out.println("这是重定向打印2"); //重定向回 控制台 System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)),true)); System.out.println("重定向回来了"); } }