为什么要用缓冲区?意义在于提高读写效率
对应类
BufferedWriter
BufferedReader
缓冲区要结合流来使用,它是在流的基础上加强流的功能
简单说明:
流是水,Buffered是蓄水池。这样就提高了流的操作效率。但是,在操作缓存区前,必须要有流对象
事例:BufferedWriter
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedDemo { public static void main(String[] args) throws IOException { //创建写入流对象 FileWriter fw=new FileWriter("demo1.txt"); //缓冲技术的原理在于它对数组的封装 BufferedWriter buff=new BufferedWriter(fw); buff.write("nihaoa"); //记住,缓冲区必须flush后才有东西 buff.flush(); //缓冲区关闭等价于fw.close(),所以不用加fw.close(); buff.close(); } }
事例:BufferedReader
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class BufferedReaderDemo { public static void main(String[] args) throws IOException { //创建流对象 FileReader fr=new FileReader("demo.txt"); BufferedReader buff=new BufferedReader(fr); //readLine()读一行,返回字符串,达到末尾返回null String line=null; while((line=buff.readLine())!=null){ System.out.println(line); } buff.close(); } }
事例:利用BufferedReader和BufferedWriter把demo1.txt写到BufferedDemo.txt中(重要)
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class BufferReaderDemo3 { public static void main(String[] args) { FileReader fr=null; FileWriter fw=null; BufferedReader bufr=null; BufferedWriter bufw=null; try{ fr=new FileReader("demo1.txt"); fw=new FileWriter("BufferedDemo.txt"); bufr=new BufferedReader(fr); bufw=new BufferedWriter(fw); String line=null;
//但是readLine()还是读1个写1个 while((line=bufr.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } }catch(IOException e){ throw new RuntimeException("读写失败"); } finally{ try{ if(bufr!=null) bufr.close(); } catch(IOException e){} } try{ if(bufw!=null) bufw.close(); } catch(IOException e){} } }
///////////////////////
基类:
OutputStream InputStream
子类:
FileOutStream
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileStream { public static void main(String[] args) throws IOException { FileOutputStream fos=new FileOutputStream("fos.txt"); fos.write("abcd".getBytes()); //在这里不需要刷新,但凡流都要关闭 fos.close(); } }
需要:复制一个图片(文件)
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class PictureDemo { public static void main(String[] args) throws IOException { FileOutputStream fos=new FileOutputStream("ee.jpg"); FileInputStream fis=new FileInputStream("ejb.jpg"); byte []buf=new byte[1024]; int ch=0; while((ch=fis.read())!=-1){ fos.write(ch); } fos.close(); fis.close(); } }
事例:读取键盘输入
当录入一行数据后,就将该行数据进行打印;如果录入的数据是over,那么停止录入
import java.io.IOException; import java.io.InputStream; public class ReadIn { public static void main(String[] args) throws IOException { InputStream in= System.in; StringBuilder sb=new StringBuilder(); while(true){ int ch=in.read(); //遇到换行符就打印 if(ch==‘\r‘) continue; if(ch==‘\n‘){ String s=sb.toString(); if("over".equals(s)) break; System.out.println(s.toUpperCase()); sb.delete(0,sb.length()); } else{ char c=(char)ch; sb.append(c); } } } }
原文:http://www.cnblogs.com/chenqr/p/6424104.html