一、处理流之一:缓冲流
1.为了提高数据读写速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组。(缓冲流就是先把数据缓冲到内存中,在内存中做io操作)
2.根据数据操作单位可以把缓冲流分为:
①BufferedInputStream 和BufferOutputStream
②BufferedReader 和 BufferedWriter
3.缓冲流要“套接”在相应的节点流上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。
4.对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出。
二、缓冲字节流
package day18;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class Test {
public static void main(String[] args){
try {
// Test.testBufferedInputStream();
// Test.testBufferedOutputStream();
Test.copyFile();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 缓冲字节输入流
* BufferedInputStream
* @throws Exception
* */
public static void testBufferedInputStream() throws Exception{
//文件字节输入流对象
FileInputStream in = new FileInputStream("F:\\testdemo\\demo\\src\\day18\\tt.txt");
//把文件字节输入流放到缓冲字节输入流对象
BufferedInputStream br = new BufferedInputStream(in);
byte[] b = new byte[10];
int len = 0;
while((len = br.read(b)) != -1){
System.out.println(new String(b,0,len));
}
//关闭流的时候,本着一个最晚开的最早关,依次关
br.close();
in.close();
}
/**
* 缓存字节输出流
* BufferedOutputStream
* @throws Exception
* */
public static void testBufferedOutputStream() throws Exception{
//创建字节输出流对象
FileOutputStream out = new FileOutputStream("F:\\testdemo\\demo\\src\\day18\\tt1.txt");
//把字节输出流对象放到缓冲字节输出流中
BufferedOutputStream bo = new BufferedOutputStream(out);
String s = "hello world";
bo.write(s.getBytes());//写到内存中
bo.flush();//刷到硬盘上
//关闭流的时候,本着一个最晚开的最早关,依次关
bo.close();
out.close();
}
/**
* 缓冲流实现文件的复制
* @throws Exception
* */
public static void copyFile() throws Exception{
//缓冲输入流
BufferedInputStream br = new BufferedInputStream(new FileInputStream("F:\\testdemo\\demo\\src\\day18\\tt1.txt"));
//缓冲输出流
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("F:\\testdemo\\demo\\src\\day18\\tt2.txt"));
byte[] b = new byte[1024];
int len = 0;//设置一个每次读取到的数据的长度,直到br.read方法执行到最后(比如hello world,会执行到d的后面一位,这个时候返回值就是-1)
while((len = br.read(b)) != -1){
bo.write(b, 0, len);//写到内存中
}
bo.flush();//刷到硬盘
bo.close();
br.close();
}
}
三、缓冲字符流
package day18;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
/**
* 缓冲字符流
*
* */
public class Test1 {
public static void main(String[] args){
try {
// Test1.testBufferedReader();
// Test1.testBufferedWriter();
Test1.copyFile();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 缓冲字符输入流
* BufferedReader
* @throws Exception
* */
public static void testBufferedReader() throws Exception{
FileReader r = new FileReader("F:\\testdemo\\demo\\src\\day18\\tt.txt");
BufferedReader br = new BufferedReader(r);
char[] c = new char[100];
int len = 0;
while((len = br.read(c)) != -1){//br.read(c)读到文件的最后一个字符的下一位,返回值就是-1
System.out.println(new String(c, 0, len));
}
br.close();
r.close();
}
/**
*缓冲字符输出流
*BuffredWriter
* @throws Exception
* */
public static void testBufferedWriter() throws Exception{
FileWriter fw = new FileWriter("F:\\testdemo\\demo\\src\\day18\\tt3.txt");
BufferedWriter bw = new BufferedWriter(fw);
String s = "hello world!!!!!";
bw.write(s);
bw.flush();
bw.close();
fw.close();
}
/**
* 缓冲字符流复制文件
* @throws Exception
* */
public static void copyFile() throws Exception{
BufferedReader br = new BufferedReader(new FileReader("F:\\testdemo\\demo\\src\\day18\\tt3.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\testdemo\\demo\\src\\day18\\tt4.txt"));
char[] c = new char[100];
int len = 0;
while((len = br.read(c)) != -1){
bw.write(c, 0, len);
}
bw.flush();
bw.close();
br.close();
}
}