1.解决什么问题?
设备与设备之间的数据传输问题...
设备: 硬盘,内存,屏幕,网络
2. IO流的分类
按流的方向: 输入流 和 输出流
按流的数据类型: 字节流 和 字符流
按功能 : 节点流 和 过滤流
| InputStream /OutputStream (抽象类) 字节流(二进制) | Reader /Writer(抽象类) 字符流 | 备注 |
节点流 | FileInputStream FileOutputStream | FileReader FileWriter | 对文件进行读写 |
PipedInputStream PipedOutputStream | PipedReader PipedWriter | 在线程之间传输数据 | |
PrintSteam | PintWriter | 标准输出 | |
过滤流(包装流) (需要节点流的包装) | ObjectInputStream ObjectOutputStream |
| 对对象进行序列化和反序列化(二进制) |
BufferedInputStream BufferedOutputStream | BufferedReader BufferedWriter | 具有缓存功能 | |
桥流 |
| InputStreamReader OutputStreamWriter | 把字节流转成字符流 |
new ObjectInputStream(new FileInputStream("e:/a.txt"));
new BufferedReader( new InputStreamReader(new FileInputStream("e:/a.txt")) );
3. IO流常用的API
3.1|-InputStream
int read(); //一次读取一个字节。返回读取的字节数。返回-1 表示结束
read(byte[] datas): 一次读取多个字节。返回读取的字节数。返回-1 表示结束
read(byte[] datas, int start, int length): 缓存字节数组。从指定位置(start)读取,读取length长度的字节数组(datas),返回读取的字节数。返回-1 表示结束
skip(int n): 跳过n个字节数据
close(): 关闭流资源
3.1.1|-FileInputStream: 文件进行读写
3.1.2|-ObjectInputStream: readObject() : 读取一个对象。对象反序列化
3.1.3|-BufferedInputStream
3.2|-OutputStream
write(int data) : 一次写一个字节。传递int,取的int的低八位,其他24位忽略。
writer(byte[] datas): 一次写出多个字节。
writer(byte[] datas, int start, int length): 缓冲字节数组,从指定位置(start),写出length长度的字节数组(datas)。
3.2.1|-FileOutputStream
3.2.2|-ObjectOutputStream : wirteObject(): 写出一个对象。对象的序列化
3.3|-Reader
int read(); 一次读取一个字符
read(char[] datas): 一次读取多个字符
read(char[] datas, int start, int length) 读取字符数组的某个部分
3.3.1|-BufferedReader: readLine(): 一次读取一行。以\r(回车) \n(换行)判断一行的结束
获取用户输入的数据:
a)new BufferedReader(new InputStreamReader(System.in)); br.readLine();获取用户输入的一行
b)Scanner scan = new Scanner();scan.nextLine(); 获取用户输入的一行。jdk5.0之后出现的
3.4|-Writer
writer(int data) : 一次写出一个字符
writer(char[] datas) :一次写出多个字符
writer( char[] datas,int start,int length) :写出字符数组的某个部分
writer(String str): 一次写出一个字符串,因为String太常用了!!
3.4.1|-BufferedWriter
newLine() 写出一个换行符
4.编码问题:
字节流不会出现编码问题,字符流才会有编码问题。
new FileWriter("e:/word");
字符流-> 字节流(编码) 查询码表
new FileReader("e:/word”)
字节流-> 字符流(解码) 查询码表
编码或解码的码表不一致,可能会出现中文乱码问题。
注意:
1)编码和解码的码表必须一致!!!
2)拷贝文件,必须使用字节流,避免编码和解码的过程导致中文乱码问题。