一、什么是流?---IO流
1.作用是将数据从一个位置传输到另外一个位置。
(1):流按照传输方向来分类:
输入流input:外界的数据传输(进入,读取)到当前程序中,
输出流ouput:当前程序的数据传输(写出)到外界。
(2)按照读写单位分类
字节流:读写时最小单位为一个字节
字符流:读写时最小单位为一个字符
(3)按照是否与外界设备直接相连分类:
节点流:直接与外界设备相连的流类型
处理流:间接的,一般内部都是封装了节点流。
(4)按照效率高低分类:
低级流
高级流
2.IO流:
File,RandomAccessFile都在java.io包。
IO流的一系列类型也都在此包下。
3:父类
InputStream: 是字节输入流的父类(抽象类型)
OutputStream:是字节输出流的父类(抽象类型)
Reader:是字符输入流的父类(抽象类型)
Writer:是字符输出流的父类(抽象类型)
4:文件输入输出流:(文件字节流)
1) FileOutputStream
构造器:
FileOutputStream(File file)
FileOutputStream(String filepath)
注意:
输出流的构造器的参数为两个时,第二个参数为 boolean append
false时,表示不追加,从文件的头部进行写出操作。
true时,表示追加,从文件的尾部进行写出操作。
1) FileOutputStream(File file,boolean append)
2)FileOutputStream(String filepath,boolean append)
2) FileInputStream
构造器:
FileInputStream(File file)
FileInputStream(String filepath)
3) 常用方法:
1)write(int num):写num二进制的低八位
2)write(byte[] bytes)
3)write(byte[] bytes,int index,int length)
4)int read():读取一个字节,放入int类型的低八位上
5)read(byte[] bytes):读取有效个字节,存入字节数组中。
6)int length = fis.read(bytes);
7)String str = new String(bytes,"utf-8");
4)相似: 随机读写文件类型也是对字节进行操作的;
二、字节缓冲流
1. 作用:
为了提高书写效率,减少交互次数,设计了一个缓冲区, 先将数据填入缓冲区,如果缓冲区的数据满了,在一次性
清空出去。【该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节 写入调用底层系统。】
2.重要构造器:此缓冲流要以文件字节流为参数。
1) BufferedInputStream(fis)
2)BufferedOutpuStream(fos)
FileOutputStream fos = new FileOutputStream("b.txt",true/false);
3. 常用方法:
flush():作用是将缓冲区的数据清空出去。
write(byte[] b,int off,int lne): 将指定的byte数字从偏移量off开始的len个字节写入此缓冲的输出流
write(int b): 将指定的字节写入此缓冲的输出流。
4 .特点:
流关闭前,会清空缓冲区内的数据。
5.涉及到FileOutputStream和BufferedOutputStream两个流 关闭流的时候,只需要关闭缓冲流bos.close();
因为:
最外层的流关闭,内层的流也会自动关闭
三、数据输入输出流
1. 流:也是以字节流为参数的。
DataInputStream
DataOutputStream
2.构造器:
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
3例如:
DataOutputStream dos = new DataOutputStream( new
FileOutputStream("c.txt",true));
dos.writeInt(21);
dos.writeUTF("你好!!");
dos.close();
DataInputStream dis = new DataInputStream( new FileInputStream("c.txt"));
int num = dis.readInt();
String str = dis.readUTF();
4.常用方法
写:
dos.writeInt(21);
dos.writeFloat(3.5F);
dos.writeUTF("你好!!");
读:
int num = dis.readInt();
float num1 = dis.readFloat();
String str = dis.readUTF();