Java学习-IO流-字节缓冲流
IO流体系↙ ↘字节流 字符流↙ ↘ ↙ ↘InputStream OutputStream Reader Writer↓ ↓ ↓ ↓
FileInputStream FileOutputStream FileReader FileWriter
FileInputStream、FileOutputStream、FileReader、FileWriter 称之为基本流
高级流:缓冲流、转换流、序列化流、打印流、压缩流、Commons-io
缓冲流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
缓冲流
缓冲流↙ ↘字节缓冲流 字符缓冲流↙ ↘ ↙ ↘Buffered Buffered Buffered Buffered
InputStream OutputStream Reader Writer
字节缓冲输入流 字节缓冲输出流 字符缓冲输入流 字符缓冲输出流
字节缓冲流
底层自带长度为8192的缓冲区提高性能
public BufferedInputStream(InputStream is):把基本流包装成高级流,提高读取数据性能
public BufferedOutputStream(OutputStream os):把基本流包装成高级流,提高写出数据性能
练习:利用字节缓冲流拷贝文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("..\\xx.txt"));
BufferedOutputStream bis = new BufferedOutputStream(new FileOutputStream("..\\copy.txt"));
int b;
while((b=bis.read())!=-1){bos.write(b);}
bos.close();
bis.close();
BufferedInputStream 的缓冲区
public BufferedInputStream(InputStream in){this(in,DEFAULT_BUFFER_SIZE);//DEFAULT_BUFFER_SIZE=8192
}
public BufferedInputStream(InputStream in,int size){super(in);if(size<=0){throw new IllegalArgumentException("BUffer size <= 0");}buf = new byte[size];//缓冲区
}
为什么只需关闭高级流,不需要关闭基本流
高级流底层关闭了基本流
public void close() throws IOException{...finally{if(flushException == null){out.close();}//关闭基本流else{try{out.close();}//关闭基本流...}}
}
字节缓冲流拷贝文件(一次读写多个字节)
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("..\\xx.txt"));
BufferedOutputStream bis = new BufferedOutputStream(new FileOutputStream("..\\copy.txt"));
byte[] bytes = new byte[1024];
int len;
while((len=bis.read(bytes))!=-1){bos.write(bytes,0,len);}
bos.close();
bis.close();
字节缓冲流的读写原理
数据源→基本流→缓冲输入流→内存→缓冲输出流→基本流→文件