IT科技类资讯

文件的拷贝、字节流的缓冲区、BufferedInputStream类

时间:2010-12-5 17:23:32  作者:系统运维   来源:系统运维  查看:  评论:0
内容摘要:大家好,我是Java进阶者。 前言本文主要学习文件的拷贝、字节流的缓冲区、BufferedInputStream类。读取文件如果一个一个的读写,这样的操作文件效率太低,通过学习字节流的缓

大家好,文件我是拷的缓Java进阶者。

前言

本文主要学习文件的贝字拷贝、字节流的节流缓冲区、BufferedInputStream类。冲区读取文件如果一个一个的文件读写,这样的拷的缓操作文件效率太低,通过学习字节流的贝字缓冲区通过一个字节数组来读取多个字节的数据,再把字节数组的节流数据一次性的写入文件中。接下来小编带大家一起来学习!

一、冲区文件的文件拷贝

1.文件的拷贝是通过输入流来读取文件的数据,通过输出流把数据写入文件。拷的缓怎么进行文件复制的贝字呢?使用FileInputStream类与FileOutputStream类复制文件。

2.首先在text文件夹下创建一个test06.txt文件,节流并写入内容为“Java进阶学习交流001、冲区Java进阶学习交流002、Java进阶学习交流003”,云南idc服务商如下图所示:

3.代码实现文件的拷贝如下所示:

import java.io.*; public class P06 {  public static void main(String[] args) throws Exception {          // TODO Auto-generated method stub         //创建一个字节输入流,读取text文件夹下test06.txt数据         InputStream in = new FileInputStream("text/test06");         //创建一个字节输出流,用来读取数据并在text文件夹下创建一个test07.txt文件         OutputStream out = new FileOutputStream("text/test07");         int num;//定义个int类型的变量num,保存每次读取的一个字节         //复制文件前的系统时间         long startTime=System.currentTimeMillis();         //while循环判断读取的一个字节是否读到文件的末尾         while((num=in.read())!=-1){              //读到的数据写到文件中             out.write(num);         }         //复制文件后的系统时间         long endTime=System.currentTimeMillis();         System.out.println("复制文件所使用的时间是:"+(endTime-startTime)+"毫秒");         //关闭流         in.close();         out.close();   } } 

运行的结果如下图所示:

二、字节流的缓冲区

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)代码如下所示:

import java.io.*; public class P07 {  public static void main(String[] args) throws Exception {          // TODO Auto-generated method stub                 //创建一个字节输入流,亿华云计算读取text文件夹下test08.txt数据                 InputStream in = new FileInputStream("text/test08");                 //创建一个字节输出流,用来读取数据并在text文件夹下创建一个test09.txt文件                 OutputStream out = new FileOutputStream("text/test09");                 //定义字节数组使用缓存区读写文件数据                 byte bt[]=new byte[1024];                 //定义一个int类型的变量num,保存读取读到缓冲区的字节数                 int num;                 //复制文件前的系统时间                 long startTime=System.currentTimeMillis();                 //while循环判断读取的字节是否读到文件的末尾                 while((num=in.read(bt))!=-1){                      out.write(bt,0,num);                 }                 //复制文件后的系统时间                 long endTime=System.currentTimeMillis();                 System.out.println("复制文件所使用的时间是:"+(endTime-startTime)+"毫秒");                 //关闭流                 in.close();                 out.close();   } } 

运行的结果如下图所示:

上面代码中主要实现了test08.txt文件的拷贝,拷贝过程中使用到了while循环将字节文件进行拷贝,每循环一次在test08.txt文件中读取很多个字节保存到数组中,通过变量num保存读取的数组的字节数,从数组的第一个字节开始,把num个字节写到文件中,当num值为-1,读取文件就结束了。最终实现了文件之间的拷贝是通过字节流的缓冲区。

三、BufferedInputStream类

1.BufferedInputStream是缓冲输入流,可以减少访问磁盘的次数,提高文件的高防服务器读取性能,它是FilterInputStream类的子类。

2.BufferedInputStream作用它相对于普通输入流优点是,它有一个缓冲数组,每次去调用read()方法,先从缓冲区读取数据,如果读取数据失败,从文件读取新数据放到缓冲区,再把缓冲区的内容显示出来。

3.如何用BufferedInputStream类读取文本内容?

(1)定义一个字节数组bt,再通过循环把文本内容循环读到bt中,再把读取到的数据显示出来。

(2)首先再text文件夹下创建一个test10.txt文件并写入"Java进阶学习交流001!"的内容。

(3)代码的实现:

import java.io.*; public class P08 {  public static void main(String[] args) throws Exception {          // TODO Auto-generated method stub         //创建一个带有缓冲区的输入流         BufferedInputStream bi = new BufferedInputStream(new FileInputStream("text/test10"));         //定义字节数组         byte[] bt = new byte[1024];         int num = 0;         //判断是否读到文件的末尾         while ((num = bi.read(bt)) != -1) {          //读取的字节转为字符串对象         String s = new String(bt, 0, num);         System.out.println("读取的内容是:"+s);         }         //关闭流         bi.close();         } } 

运行的结果如下图所示:

四、总结

本文主要介绍了文件的拷贝、字节流的缓冲区、BufferedInputStream类。文件的拷贝是输入流来读取文件的数据,通过输出流把数据写入文件。字节流的缓冲区创建一个字节数组来保存一次性读取多个字节的数据,再把字节数组中的数据一次性写入文件。BufferedInputStream是缓冲输入流,可以减少访问磁盘的次数,提高文件的读取性能,它是FilterInputStream类的子类;它有一个缓冲数组,每次去调用read()方法,先从缓冲区读取数据,如果读取数据失败,从文件读取新数据放到缓冲区,再把缓冲区的内容显示出来。希望通过本文的学习,对你有所帮助!

本文转载自微信公众号「Java进阶学习交流」,可以通过以下二维码关注。转载本文请联系Java进阶学习交流公众号。

copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap