缓冲字节流 java_Java字节流的缓冲区

虽然上一个案例实现了文件的拷贝,但是一个字节一个字节的读写,需要频繁的操作文件,效率非常低,这就好比从北京运送烤鸭到上海,如果有一万只烤鸭,每次运送一只,就必须运输一万次,这样的效率显然非常低。为了减少运输次数,可以先把一批烤鸭装在车厢中,这样就可以成批的运送烤鸭,这时的车厢就相当于一个临时缓冲区。当通过流的方式拷贝文件时,为了提高效率也可以定义一个字节数组作为缓冲区。在拷贝文件时,可以一次性读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件。接下来通过一个案例来学习如何使用缓冲区拷贝文件,如例所示。import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class IOTest {

public static void main(String[] args) {

try {

// 创建一个字节输入流,用于读取当前目录下source 文件夹中的mp3 文件

InputStream in = new FileInputStream("D:/one/example.txt");

// 创建一个文件字节输出流,用于将读取的数据写入当前目录的target 文件中

OutputStream out = new FileOutputStream("D:/one/example.txt");

// 以下是用缓冲区读写文件

byte[] buff = new byte[1024]; // 定义一个字节数组,作为缓冲区

// 定义一个int 类型的变量len 记住读取读入缓冲区的字节数

int len;

long begintime = System.currentTimeMillis();

while ((len = in.read(buff)) != -1) { // 判断是否读到文件末尾

out.write(buff, 0, len); // 从第一个字节开始,向文件写入len 个字节

}

long endtime = System.currentTimeMillis();

System.out.println("拷贝文件所消耗的时间是: " + (endtime - begintime) + "毫秒");

in.close();

out.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

运行结果:拷贝文件所消耗的时间是: 0毫秒

在拷贝过程中,使用while循环语句逐渐实现字节文件的拷贝,每循环一次,就从文件读取若干字节填充字节数组,并通过变量len记住读入数组的字节数,然后从数组的第一个字节开始,将len个字节依次写入文件。循环往复,当len值为-1时,说明已经读到了文件的末尾,循环会结束,整个拷贝过程也就结束了,最终程序将整个拷贝过程所消耗的时间打印了出来。

通过两种拷贝方式的对比,可以看出拷贝文件所消耗的时间明显减少了,从而说明缓冲区读写文件可以有效的提高程序的效率。这是因为程序中的缓冲区就是一块内存,用于存放暂时输入输出的数据,使用缓冲区减少了对文件的操作次数,所以可以提高读写数据的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值