1.流分类
不同角度对流进行分类:
1.根据数据单位不同,字符流,字节流
2.数据流方向可分为,输入流,输出流
3.功能不同,可分为:节点流,处理流。
2.流的体系
Java中所有的流类位于java.io包,分别继承以下四种抽象流类型
类型 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
3.常见的流介绍
3-1 常见节点流
1.对文件操作的字符流有FileReader/FileWriter
2.对文件操作的字节流有 FileInputStream/FileOutputStram
3-2.常见处理流
3-2-1.缓冲流
概念:缓冲流要套接在相应的节点流上,为读写提供了缓冲功能
分类:
A:字节缓冲流 BufferedInputStream/BufferedOutputStream
B:字符缓冲流 BufferReader/BufferWriter
注意:
A:字符缓冲流分别提供了读取和写入一行的方法ReadLine和NewLine方法
B:对于输出缓冲流,写出的数据,会先写入到内存中,再使用flush方法将内存中的数据刷到硬盘。所以,在使用字符缓冲流的时候,一定要先flush,然后再close,避免数据丢失。
3-2-2转换流 用于字节数据到字符数据之间的转换
1. InputStreamReader(要InputStream套接):字节到字符的桥梁
2. OutputStreamWriter:字符到字节的桥梁
A:字符流InputStreamReader字节流通向字符流的桥梁
B:OutPutStreamWriter(要OutPutStream套接)字符流通向字节流的桥梁
3-2-3数据流
提供读写java中基本数据类型的功能 DataInputStream/DataOutputStream
3-2-4对象流
用于直接将对象写入写出
ObjectInputStream /ObjectOutputStream
作用的对象必须实现Serializable接口
4.字节流和字符流的转换
4-1.字节流转字符流
概念:
字节流(InputStream,OutPutStream)-》字符流(Reader,Writer)
实现方式:
利用这两个类可以实现 InputStreamReader,OutputStreamWriter
package com.demo9aa.demo6;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Demo1 {
public static void main(String[] args) throws IOException {
//字节流转换为字符流【输入流】
//模拟出字节流
FileInputStream f=new FileInputStream("E:\\1.txt");
//字节流转换为字符流
InputStreamReader re=new InputStreamReader(f,"GBK");
BufferedReader reb=new BufferedReader(re);
//验证是否成功
StringBuffer b=new StringBuffer();
String s=null;
while((s=reb.readLine())!=null){
b.append("\n"+s);
}
System.out.println(b.toString());
reb.close();
re.close();
f.close();
//字节流转换为字符流【输出流】
OutputStreamWriter w=new OutputStreamWriter(new FileOutputStream("E:\\1.txt"), "GBK");
BufferedWriter ww=new BufferedWriter(w);
ww.write("中国梦");
ww.flush();
ww.close();
}
}
4-2.字符流转换为字节流
概念:
字符流(Reader,Writer) -》字节流(InputStream,OutPutStream)
实现方式:
(1)利用字符流得到char[]数据
(2)char[]转换为String;
(3)String的getByte()转换为byte[]数据
(4)通过 ByteArrayInputStream和ByteArrayOutputStream 即可获得字节流
package com.demo9aa.demo6;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
//字符流转字节流[输入]
//模拟出字符流
FileReader rr=new FileReader("E:\\1.txt");
//转换过程
char[] c= new char[1024];
StringBuffer s=new StringBuffer();
while(rr.read(c, 0, c.length)!=-1){
s.append(String.valueOf(c));
}
ByteArrayInputStream in=new ByteArrayInputStream(s.toString().getBytes("GBK"));
//验证转换成功否
FileOutputStream f=new FileOutputStream("E:\\2.txt");
f.write(s.toString().getBytes("GBK"));
}
}