package A10_IOStream; import java.io.*; /* 作为IO流的入门,今天我们见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。 这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,就像穿上了铠甲的武士一样,相当于是对基本对象的一种增强。 BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。 BufferedInputStream(InputStream in)创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。 BufferedInputStream(InputStream in, int size)创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。 int read()参见 InputStream 的 read 方法的常规协定。 read(byte[] b, int off, int len)从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。 void close()关闭此输入流并释放与该流关联的所有系统资源。 BufferedOutputStream BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 BufferedOutputStream(OutputStream out, int size)创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。 void flush()刷新此缓冲的输出流。 void write(byte[] b, int off, int len)将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。 void write(int b)将指定的字节写入此缓冲的输出流。 */ //本示例通过缓冲字节流实现文件复制 public class D07BufferedInputStream { public static void main(String[] args) { copyFileWithBuffered("D:\[秘密]引力法则.mkv", "D:\[秘密]引力法则_副本.wmv"); } public static void copyFileWithBuffered(String src, String tar) { File file = new File(src); if (!file.exists()) { System.out.println("源文件不存在!"); return; } long currTime = System.currentTimeMillis(); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tar));) { byte[] buff = new byte[1024 * 1024 * 64]; //1024*1024*64 代表创建缓冲区大小为64Mb int len = 0; while ((len = bis.read(buff)) != -1) { bos.write(buff,0,len); } } catch (IOException e) { e.printStackTrace(); } long finishTime = System.currentTimeMillis(); System.out.println("文件复制耗时:" + Math.round(finishTime - currTime)*0.001+"(毫秒)"); } }