0227 缓冲流
缓冲流,功能流,主要还是依赖基础流去工作
1、字节输入输出缓冲流
之前我们所学的文件复制,很明显,数组复制比单个字节复制要快,那么加上缓冲流我们再比较一下数组复制和单个字节复制的速度
缓冲流 单个字节复制
public static void main(String[] args) throws IOException {
//用缓冲流复制文件
//明确文件位置读取 字节输入流
FileInputStream fis=new FileInputStream("F:\\io1127\\jdk.rar");
//字节缓冲输入流
BufferedInputStream bis=new BufferedInputStream(fis);
//明确复制到的文件位置 字节输出流
FileOutputStream fos=new FileOutputStream("F:\\io1127\\a\\jdk.rar");
//字节缓冲输出流
BufferedOutputStream bos=new BufferedOutputStream(fos);
//开始复制
int len=0;
long time=System.currentTimeMillis();
while((len=bis.read())!=-1){
bos.write(len);
}
long time2=System.currentTimeMillis();
System.out.println((time2-time)/1000);
bis.close();
bos.close();
}
缓冲流 数组复制
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("F:\\io1127\\jdk.rar");
BufferedInputStream bis=new BufferedInputStream(fis);
FileOutputStream fos=new FileOutputStream("F:\\io1127\\a\\b\\jdk.rar");
BufferedOutputStream bos=new BufferedOutputStream(fos);
byte[] bytes=new byte[1024];
long time=System.currentTimeMillis();
int len=0;
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
long time2=System.currentTimeMillis();
System.out.println((time2-time)/1000);
bis.close();
bos.close();
}
由上述两段代码,从时间上比较 缓冲流加数组复制比缓冲流加单个字节复制的速度要快,并且加缓冲流比不加缓冲流的要快
3、字符输入输出缓冲流
在字符输入缓冲流中提供了两个新的常用类方法
newline()在当前系统中写入一个换行符
readLine() 在读取文件时 一行一行读取
那我们来读取一下
public static void main(String[] args) throws IOException {
//一行一行读取
FileInputStream fis=new FileInputStream("F:\\io1127\\hello.txt");
//转换流
InputStreamReader iso=new InputStreamReader(fis,"utf-8");
//缓冲流
BufferedReader br=new BufferedReader(iso);
//读取一个文本行
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
因为工作空间和文件的码表不一样 所以我们需要加入转换流去指定码表进行读取
利用字符输入输出缓冲流对文件进行复制,同时也需要加入转换流去指定码表
public static void main(String[] args) throws IOException {
//明确数据源
FileInputStream fis=new FileInputStream("F:\\io1127\\hello.txt");
//添加转换流
InputStreamReader isr=new InputStreamReader(fis,"utf-8");
//添加缓冲流
BufferedReader br=new BufferedReader(isr);
//明确目的地
FileOutputStream fos=new FileOutputStream("F:\\io1127\\a\\hello.txt");
//添加转换流
OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
//添加缓冲流
BufferedWriter bw=new BufferedWriter(osw);
//开始复制
String line=null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}

浙公网安备 33010602011771号