大家好,我是Java进阶。前言本文主要研究文件复制、字节流缓冲区、BufferedInputStream类。如果一个一个的读写文件,这样的操作文件的效率太低了。通过学习字节流的buffer,可以通过字节数组读取多个字节的数据,然后一次性写入字节数组的数据。写入文件。接下来小编就带大家一起来学习一下吧!一、文件复制1、文件复制是通过输入流读取文件的数据,通过输出流将数据写入文件。如何复制文件?使用FileInputStream类和FileOutputStream类来复制文件。2、先在text文件夹下新建一个test06.txt文件,内容写为“Java进阶学习交流001、Java进阶学习交流002、Java进阶学习交流003”,如下图:3、复制代码实现文件如下:importjava.io.*;publicclassP06{publicstaticvoidmain(String[]args)throwsException{//TODOAuto-generatedmethodstub//创建字节输入流,读取文本文件夹InputStreamin中的test06.txt数据=newFileInputStream("text/test06");//创建字节输出流读取数据,在文本文件夹中创建test07.txt文件OutputStreamout=newFileOutputStream("text/test07");intnum;//定义一个int类型的变量num,保存每次读取一个字节//复制文件前的系统时间longstartTime=System.currentTimeMillis();//while循环判断一个字节读取是否已经读入文件在theendofwhile((num=in.read())!=-1){//读取数据写入文件out.write(num);}//复制文件后的系统时间longendTime=System.currentTimeMillis();System.out.println("复制文件所用时间为:"+(endTime-startTime)+"毫秒");//关闭流in.close();out.close();}}run结果如下图所示:二、字节流的缓冲区1、复制文件时,如果一个字节一个字节地读写,频繁操作文件的效率太低。先创建一个字节数组来保存一次读取多个字节的数据,然后将字节数组中的数据一次性写入文件。这里的缓冲区相当于一个字节数组!2.如何使用缓冲区来复制文件?(1)先在text文件夹下新建一个test08.txt文件,写入内容为“HelloWorld,Java编程001!,HelloWorld,Java编程002!,HelloWorld,Java编程003!,HelloWorld,Java编程004!,HelloWorld,Java编程005!,HelloWorld,Java编程006!",如下图所示:(2)代码如下Show:importjava.io.*;publicclassP07{publicstaticvoidmain(String[]args)throwsException{//TODOAuto-generatedmethodstub//创建字节输入流,读取文本文件夹中的test08.txt数据InputStreamin=newFileInputStream("text/test08");//创建字节输出stream读取数据并在text文件夹中创建test09.txt文件OutputStreamout=newFileOutputStream("text/test09");//定义字节数组使用buffer读写文件数据bytebt[]=newbyte[1024];//定义一个int类型的变量num来保存读入缓冲区的字节数intnum;//复制文件前的系统时间longstartTime=System.currentTimeMillis();//while循环判断读取的字节是否被读取到文件末尾while((num=in.read(bt))!=-1){out.write(bt,0,num);}//复制文件后的系统时间longendTime=System.currentTimeMillis();System.out.println("复制文件所用时间为:"+(endTime-startTime)+"毫秒");//关闭流in.close();out.close();}}运算结果i如下图所示:以上代码主要实现了test08.txt文件的拷贝,拷贝过??程使用使用while循环复制字节文件,每次循环从test08.txt文件中读取大量字节保存到数组中,通过变量num保存数组读取的字节数,从数组的第一个字在该部分的开头,将num个字节写入文件。当num值为-1时,文件的读取结束。最后,文件之间的拷贝是通过字节流的缓冲区来实现的。三、BufferedInputStream类1.BufferedInputStream是缓冲输入流,可以减少磁盘访问次数,提高文件读取性能。它是FilterInputStream类的子类。2、BufferedInputStream的作用与普通的输入流相比,它的优势在于它有一个缓冲数组。每次调用read()方法时,它首先从缓冲区中读取数据。如果读取数据失败,则从文件中读取新的数据放入Buffer中,然后显示buffer中的内容。3、如何使用BufferedInputStream类读取文本内容?(1)定义一个字节数组bt,然后通过循环将文本内容读取到bt中,然后显示读取到的数据。(2)先在text文件夹下新建一个test10.txt文件,写入“Java进阶学习交流001!”的内容。(3)代码实现:importjava.io.*;publicclassP08{publicstaticvoidmain(String[]args)throwsException{//TODOAuto-generatedmethodstub//创建带缓冲区的输入流BufferedInputStreambi=newBufferedInputStream(newFileInputStream("text/test10"));//定义字节数组byte[]bt=newbyte[1024];intnum=0;//判断是否读取到文件末尾while((num=bi.read(bt))!=-1){//读取的字节转换为字符串对象Strings=newString(bt,0,num);System.out.println("读取内容为:"+s);}//关闭流bi.close();}}运行结果显示在下图:4.总结本文主要介绍了文件的拷贝,字节流的缓冲区,BufferedInputStream类。文件的副本是输入流读取文件的数据,数据通过输出流写入文件。字节流的缓冲区创建一个字节数组来保存一次读取多个字节的数据,然后将字节数组中的数据一次性写入文件。BufferedInputStream是缓冲输入流,可以减少磁盘访问次数,提高文件读取性能。它是FilterInputStream类的子类;它有一个缓冲区数组,每次调用read()方法时,首先从缓冲区中读取数据,如果读取数据失败,则从文件中读取新的数据到缓冲区中,然后显示缓冲区中的内容。希望本文的学习对您有所帮助!本文转载自微信公众号《Java进阶学习交流》,可通过以下二维码关注。转载本文请联系Java进阶学习交流公众号。
