- 字节流总结
/*
* 1. IO流分为字节流和字符流
* 字节流 InPutStream(字节输入流) OutPutStream(字节输出流)
* 字符流 Reader(字符输入流) Writer(字符输出流)
* 带Buffered的效率快的原因是 可以一次读很多个字节 先放到内存中 不向磁盘写入 凑够缓冲区大小 一次性写入磁盘 减少磁盘操作数
*/
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt"));
bos.write("hello".getBytes()); // 向文本文档里写入 文本
bos.close();
System.out.println("操作完成");
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
byte[] b = new byte[1024];
int len=-1;
while((len=bis.read(b))!=-1)
{
//System.out.println((char)len); 读出文本内容到控制台
bos.write(b,0,len); //一次读多个字节 复制文件
}
bis.close();
2.
字符流总结
public static void main(String[] args) throws IOException, FileNotFoundException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("demo01_utf8"),"utf-8"));
bw.write("hello,您好啊");
bw.newLine();
bw.write("how are you ,你们好吗");
bw.close();
//因为默认是 GBK的编码 如果改成UFT-8会出现乱码问题 编码格式要一样
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("demo01_utf8"),"utf-8"));
String line = null;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
}
3.阶段小结(”流总结 :”)
《1》 “字节流 :”
InputStream : 字节输入流
|– FileInputStream
|– BufferedInputStream
OutputStream : 字节输出流
|– FileOutputStream
|– BufferedOutputStream
《2》 “字符流 :”
Reader : 字符输入流
|– InputStreamReader : InputStream + 任意编码表
|– FileReader : InputStreamReader + 默认编码表 (便捷类) 字节流 + 编码表
|– BufferedReader
Writer : 字符输出流
|– OutputStreamWriter : OutputStream + 任意编码表
|– FileWriter : OutputStreamWriter + 默认编码表 (便捷类)字节流 + 编码表
|– BufferedWriter
《3》” 如何选择使用那种流呢?”
“问题1 : 读取字节数据还是字符数据?”
字节 : BufferedInputStream / BufferedOutputStream
字符 : BufferedReader / BufferedWriter
“问题2 : 是读还是写?”
读 : BufferedInputStream / BufferedReader
写 : BufferedOutputStream / BufferedWriter
“问题3 : 是否需要高效缓冲呢 ?” 当然要.
是 : 就用对应体系的缓冲流包起来. 缓冲流就是用来装饰其它流的.所以,要加缓冲,就用缓冲流包装其它流.
“问题4 : 是否需要指定编码表?”
需要 , 转换流. OutputStreamWriter & InputStreamReader
不需要 , 便捷流. FileWriter & FileReader