1、字节流
1)包含两个抽象类:InputStream 、 OutputStream
其中,InputStream抽象了应用程序读取数据的方式,而OutputStream抽象了应用程序写出数据的方式
2)EOF = end,读到-1就是读到结尾了;
3)输入流的基本方法
int b =in.read();读取一个字节无符号的填充到int的低8位,读到-1就结束(EOF)
in.read(byte[] buf);
in.read(byte[] buf,int start,int size);
4) 输出流的基本方法
out.write(int b); 写出一个byte到流,b的低八位
out.write(byte[] buf); 将buf的字节数组都写入到流
out.write(byte[] buf, int start,int size);
5) FileInputStream---->具体实现了在文件中读取数据
6)FileOutputStream---->具体实现了向文件中写出byte类型数据的功能
7) DataOutputStream/DataInputStream
对“流”功能的扩展,可以更加方便的读取int,long,字符等类型数据
DataOutputStream
writeInt()/writeDouble()/writeUTF()
8) BufferedInputStream & BufferedOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件写入和读取操作时,都会加上缓冲,这种操作提高了IO的性能
假设在应用程序中将数据写入文件,相当于将一缸水倒入另一个缸中:
FileOutputStream---> write():相当于将水一滴一滴地倒入缸中;
DataOutputStream--->writeXxx():相当于将水一瓢一瓢地倒入缸中;
BufferedOutputStream--->writeXxx():相当于先用瓢将水放入桶(缓冲区)中,然后再放入缸中,因此性能就提高了。
2、字符类
1)编码问题
2)认识文本和文本文件
Java中的文本(char)是16位的无符号的整数,是字符的Unicode编码(双字节编码)
文件是byte byte byte....的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte数据存储集合。
3)字符流(Reader Writer)——>操作的大都是文本文本文件
字符处理,一次处理一个字符;
字符的底层仍然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
FileReader/FileWrite 简单数据读取和输入
字符流过滤器
BufferedReader ---->readLine 一次读一行;
BufferedWrite/PrintWrite---->一次写一行