缓冲流
缓冲流:
读取数据大量的文件时 ,读取的速度慢, java提供了一套缓冲流,提高IO流的效率。分为字节缓冲流和字符缓冲流。
★字节缓冲流:
缓冲输出流:BufferedOutputStream 缓冲输入流:BufferesInputStream
BufferedOutputStream:
/* * 字节输出流的缓冲流 作用 提高效率 * 继承OutputStream * 构造方法 new BufferedOutputStream(OutputStream out); * * */ public class BufferedOutputStreamDemo { public static void main(String[] args) throws Exception { // 1创建字节输出流 绑定文件 //FileOutputStream fos =new FileOutputStream("c:\\buffer"); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:\\buffer")); bos.write(65);//自动查码表 utf-8 0 1 //输出字符串 byte[] b= "hello world".getBytes(); bos.write(b); //截取 bos.write(b, 3, 2); bos.close(); } }
BufferesInputStream:
/* * 字节输入流的缓冲流 * 继承InputStream * 构造方法 * * */ public class BufferedInputStreamDemo { public static void main(String[] args) throws Exception { //1 创建字节输入流的缓冲流对象 BufferedInputStream b = new BufferedInputStream(new FileInputStream("c:\\buffer")); byte[] bs = new byte[1024]; b.close(); int len = 0; while((len=b.read(bs))!=-1){ System.out.print(new String(bs,0,len)); } } }
★字符缓冲流,用于文本数据的高速写入
缓冲输入流BufferedReader 缓冲输出流BufferedWrite
BufferedReader
public class BufferedReaderDemo { public static void main(String[] args) throws Exception { //创建字符输入缓冲流对象 BufferedReader bu =new BufferedReader(new FileReader("c:\\bu.txt")); String len = null; while((len=bu.readLine())!=null){ System.out.println(len); } bu.close(); } }
BufferedWrite
/*字符输出缓冲流 * write(); * 构造方法 BufferedWriter(Writer w); * new line() 写换行 \r\n * linux \n * */ public class BufferedWriterDemo { public static void main(String[] args) throws IOException { //创建字符输出流 封装文件 FileWriter fWriter = new FileWriter("c://bu.txt"); BufferedWriter bufferedWriter = new BufferedWriter(fWriter); bufferedWriter.write("您好"); bufferedWriter.newLine();//换行 bufferedWriter.write(100); bufferedWriter.flush(); bufferedWriter.write("床前明月光"); bufferedWriter.close(); } }
文件缓冲流的复制方式:
/* * 文件的复制方式 * 1 字节流读写单个字节 * 2 字节流读写字节数组 2405ms * 3 字节流缓冲区 读写单个字节 4855ms * 4 字节流缓冲区读写字节数组 697ms * */ public class Copy { public static void main(String[] args) throws Exception { long timeStart = System.currentTimeMillis(); copy4(new File("c:\\liu.mp4"), new File("d:\\liu.mp4")); long end = System.currentTimeMillis(); System.out.println(end-timeStart); } // 4 字节流缓冲区读写字节数组 public static void copy4(File src,File desc) throws Exception{ BufferedInputStream bu = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream ou = new BufferedOutputStream(new FileOutputStream(desc)); int len = 0; byte[] b=new byte[1024*10]; while((len=bu.read(b))!=-1){ ou.write(b,0,len); } ou.close(); bu.close(); } //3 字节流缓冲区 读写单个字节 public static void copy3(File src,File desc) throws Exception{ BufferedInputStream bu = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream ou = new BufferedOutputStream(new FileOutputStream(desc)); int len = 0; while((len=bu.read())!=-1){ ou.write(len); } ou.close(); bu.close(); } //2 字节流读写字节数组 public static void copy2(File src,File desc) throws Exception{ FileInputStream fis = new FileInputStream(src); FileOutputStream fos = new FileOutputStream(desc); int len = 0; byte[] b =new byte[1024*10]; while((len=fis.read(b))!=-1){ fos.write(b,0,len); } fos.close(); fis.close(); } //1 字节流读写单个字节 public static void copy1(File src,File desc) throws Exception{ FileInputStream fis = new FileInputStream(src); FileOutputStream fos = new FileOutputStream(desc); int len = 0; while((len=fis.read())!=-1){ fos.write(len); } fos.close(); fis.close(); } }