从内存里读叫做输入流:inputStream
将内容写入到指定目录里叫做输出流:outputStream
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流
java.io.Reader 字符输入流
java.io.Writer 字符输出流
在java中只要"类名"以Stream结尾的都是字节流。以"Reader/Writer"结尾的都是字符流 。
BufferedReader 是一个缓冲字符输入流,该流可以对 FileRead 进行包装,提供一个缓存数组,一次将数据按照一定规则读取到缓存区中,输入流每次读取文件数据时都需要将数据进行字符编码,而 BufferedReader 的出现,降低了输入流访问数据源的次数,将一定大小的数据一次读取到缓存区并进行字符编码,从而提高 IO 的效率。
BufferedReader 从字符输入流中读取文本,缓冲字符,以便有效地读取字符、数组和行。可以指定缓冲区大小,也可以使用默认大小(8192)。对于大多数用途,默认值足够大。
一般来说,对Reader发出的每个读请求都会导致对底层字符或字节流发出相应的读请求。因此,建议将 BufferedReader 封装在任何 read() 操作可能代价高昂的 Reader(如FileReaders和InputStreamReaders ) 周围。
例如:
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
//1,读取文件、将文件写入到另一个文件里
FileInputStream fis = new FileInputStream("/home/jing/1.txt");
FileOutputStream fisR = new FileOutputStream("/home/jing/2.txt",false);
byte[] b = new byte[1024];
int len = 0;
while((len = fis.read(b)) != -1){
fisR.write(b,0,len);
fis.close();
}
//2,BufferedReader读取字符流
FileReader fileReader = new FileReader("/home/jing/1.txt");
BufferedReader br = new BufferedReader(fileReader);
String str = "";
while((str = br.readLine()) != null){
System.out.println(str);
}
br.close();
//3,BufferedReader读取字符流 InputStreamReader将字节流转化为字符流
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("/home/jing/1.txt")));
String str = "";
while((str = br.readLine()) != null){
System.out.println(str);
}
br.close();