java.io包中提供了FilterInputStream和FilterOutputStream类分别对其他输入输出流进行特殊的处理,它们在
* 读/写数据的同时还能够对数据进行特殊的处理。另外它们还提供了同步机制,是的某一时刻之后一个线程可以访问输入/输出流。
* FilterInputStream/FilterOutputStream都是抽象类。
* FilterInputStream有三个子类:BufferedInputStream、DataInputStream、PushbackInputStream
* FilterOutputStream也有三个子类:BufferedOutputStream、DataOutoutStream、PrintStream
*
* 使用过滤字节流的时候,必须先制定节点流对象处理底层的数据,然后把节点流对象作为过滤流对象的实参使用。即把过滤流对象连接到某个输入/输出节点流对象上如下:
* FileInputStream fis = new FileInputStream(new File("c:/abc.txt"));
* DataInputSream dis = new DataInputStream(fis);
一、BufferedInputStream/BufferedOutputStream
* BufferedInputStream/BufferedOutputStream 是缓冲字节流,它引入了针对内存缓冲区的操作,从而提高了读写数据的效率。
* 缓冲区的默认大小为32字节,也可以指定缓冲区的大小。
* 相应的构造的方法
* BufferedInputStream(InputStream in) 这里的in只要是继承自InputSream的对象都可以作为参数
* BufferedInputStream(InputStream in,int size)
* BufferedOutputStream与上面的对应。
Demo:使用BufferedInputStream/BufferdeOutputStream完成文件的复制。
1 package com.tai.io; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 10 public class BufferedInputStreamDemo 11 { 12 /** 13 * java.io包中提供了FilterInputStream和FilterOutputStream类分别对其他输入输出流进行特殊的处理,它们在 14 * 读/写数据的同时还能够对数据进行特殊的处理。另外它们还提供了同步机制,是的某一时刻之后一个线程可以访问输入/输出流。 15 * FilterInputStream/FilterOutputStream都是抽象类。 16 * FilterInputStream有三个子类:BufferedInputStream、DataInputStream、PushbackInputStream 17 * FilterOutputStream也有三个子类:BufferedOutputStream、DataOutoutStream、PrintStream 18 * 19 * 使用过滤字节流的时候,必须先制定节点流对象处理底层的数据,然后把节点流对象作为过滤流对象的实参使用。即把过滤流对象连接到某个输入/输出节点流对象上 20 * 21 * FileInputStream fis = new FileInputStream(new File("c:/abc.txt")); 22 * DataInputSream dis = new DataInputStream(fis); 23 * BufferedInputStream/BufferedOutputStream 是缓冲字节流,它引入了针对内存缓冲区的操作,从而提高了读写数据的效率。 24 * 缓冲区的默认大小为32字节,也可以指定缓冲区的大小。 25 * 相应的构造的方法 26 * BufferedInputStream(InputStream in) 这里的in只要是继承自InputSream的对象都可以作为参数 27 * BufferedInputStream(InputStream in,int size) 28 * BufferedOutputStream与上面的对应。 29 */ 30 public static void main(String[] args) throws IOException 31 { 32 FileInputStream fis = new FileInputStream(new File("c:/曲婉婷 - 没有什么不同 [mqms].mp3")); 33 BufferedInputStream bis = new BufferedInputStream(fis,1024); 34 FileOutputStream fos = new FileOutputStream(new File("c:/没有什么不同.mp3")); 35 BufferedOutputStream bos = new BufferedOutputStream(fos,1024); 36 37 byte[] buffer = new byte[1024]; 38 int len =0; 39 while(-1!=(len=bis.read(buffer,0,1024))) 40 { 41 //将buffer中从fis读取来的数据写入到bos中 42 bos.write(buffer,0,len); 43 } 44 bos.flush();//最近一次读取的数据可能达不到1024字节,这里强制清空缓冲区\ 45 System.out.println("已经将c:/曲婉婷 - 没有什么不同 [mqms].mp3复制到c:/没有什么不同.mp3"); 46 bos.close(); 47 fos.close(); 48 } 49 }