流
Io即 Input输入流和Output输出流
是java中实现输入输出的基础,它可以方便的实现数据的输入和输出
分类:
字节流和字符流
根据流操作的数据单位的不同可以分为字节流和字符流
输入流和输出流
根据流传输方向的不同,又可以分为输入流和输出流
节点流和处理六
根据流的功能不同,可以分为节点流和处理六
字节流
io流中针对字节的输入和输出提供了一系列的流,统称为字节流
字节流是程序中最常用的流
在jdk中,所有的字节输入流都继承自InputStream所有的字节输出流都继承自OutPutStream
inputstream被看成一个输入管道,outputstream被看成一个输出管道,数据通过inputstream从原设备输入到程序,通过outputstream从程序输出到目标设备,从而实现数据的传输
inputstream的常用方法:
int read() 从输入流读取一个字节,把他转换为整数,并返回这一整数,如果没有可用的字节返回-1
intread(byte[] b) 从输入流读取若干字节,把他们保存到参数b指定的字节数组中,并返回整数表示读取字节的数目
void close() 关闭此输入流与该流关联的所有系统资源
read方法都是用来读数据的,进行io看流操作时应该调用close方法关闭流,释放资源
OutPutstream的常用方法
void write(int b) 想输入流写入一个字节
void write(byte[] b) 把参数b指定的字节数组的所有字节写到输出流
void close() 关闭此输入流与该流关联的所有系统资源
write是用来写数据的
字节流读写文件
在操作文件是从一个文件中去读数据并将数据写入到另一个文件,这一过程就是文件的读写
针对文件的读写操作,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream。FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据。从文件读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取。
字节流的缓冲区:
定义一个字节数组缓冲区
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("a.txt");
FileOutputStream fileOutputStream = new FileOutputStream("b.txt");
byte[] bytes = new byte[1024];
int len;
while((len = fileInputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
fileInputStream.close();
fileOutputStream.close();
}
从比较运行结果可以看出拷贝文件所消耗的时间明显减少了很多,这说明使用缓冲区读写文件可以有效的提高程序的传输效率。
创建字节缓冲区长度随意,建议1024整数位,它的效率会更高一点。
read方法如果传入了数组,那么会根据数组容器大小,决定一次读取多少字节。
read方法返回值:读取到的(有效)字节个数。
字接缓冲流
除了定义字节缓冲区来提高文件拷贝效率外,IO中还提供了两个字节缓冲流来提高文件拷贝效率:BufferedInputStream和BufferedOutputStream。它们的构造方法中分别接收InputStream和OutputStream类型的参数作为对象,在读写数据时提供缓冲功能
这两个流都定义一个大小为8192的字节数组,当调用read()或write()方法读写数据时,首先将读写的数据存入到定义好的字节数组,然后将字节数组的数据一次性读写到文件中,这种方式与定义缓冲区类似,都对数据进行了缓冲,从而有效地提高了数据的读写效率。