Java中提供了一套缓冲流,它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度。
字节缓冲流
写入数据到流中,字节缓冲输出流 BufferedOutputStreaml
读取流中的数据,字节缓冲输入流 BufferedInputStream
- 提高效率
- BufferedOutputStream 继承OutputStream
- BufferedInputStream 继承InputStream
- write() 字节 字节数组
- read()
字节缓冲输出流BufferedOutputStream
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("e:\\buffer.txt"));//把一般流文件包装成高效的流
byte[] b="HelloWorld".getBytes();
bos.write(64);
bos.write(b);
bos.close();
bufferedIn();
字节缓冲输入流 BufferedInputStream
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("e:\\buffer.txt"));//把一般流文件包装成高效的流
byte[] b=new byte[9];// 将读到的指定长度字节组存入数组b中
int i=0;
while((i=bis.read(b))!=(-1)){
System.out.print(new String(b,0,i));
}
bis.close();
}
字符缓冲流
字符缓冲输入流 BufferedReaderl
字符缓冲输出流 BufferedWriter
字符缓冲输出流 BufferedWriter
- 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
- 构造方法:new BufferedWriter(Writer w),可传递FileWriter,OutputStreamWriter
- 特有方法: newLine()
private static void bufferedIn() throws IOException{
BufferedWriter bos=new BufferedWriter(new FileWriter("e:\\buffer.txt"));
char[] c={'a','b','c','d'};
bos.write(64);
bos.write(c);
bos.newLine();//换行,平台无关性 Windows:\n\r Linux:\n
bos.flush();
bos.write("你好漂亮\n".toCharArray());
bos.flush();
bos.write("你好漂亮\n");
bos.flush();
bos.close();
}
字符缓冲输入流 BufferedReader
private static void bufferedIn() throws IOException{
BufferedReader bis=new BufferedReader (new FileReader("e:\\buffer.txt"));
char[] c=new char[9];// 将读到的指定长度字节组存入数组b中
int i=0;
while((i=bis.read(c))!=(-1)){
System.out.print(new String(c, 0,i));
}
bis.close();
}
使用缓冲流复制文本
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new FileReader("e:\\buffer.txt"));
BufferedWriter bos=new BufferedWriter(new FileWriter("e:\\buffer_copy.txt"));
String line=null;;//readLine()返回值为String,当阅读结束时返回null
while ((line=br.readLine())!=null) {//不读取文中换行符,只有有效字符
bos.write(line);
bos.newLine();
bos.flush();
}
br.close();//释放流
bos.close();
}
}