处理流:增强功能,提供性能,节点流之上
缓冲流
字节缓冲流
BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建
BufferedInputStream
时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark
操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。BufferedOutputStream
该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统
字符缓冲流
BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read()操作可能开销很高的 Reader(如 FileReader 和InputStreamReader)。如果没有缓冲,则每次调用read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的
BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
文件复制
public class CopyFileDemo {
public static void main(String[] args){
}
public void copyFile(String souce,String dest) throws Exception{
File sourcefile = new File(souce);
File destfile = new File(dest);
InputStream is = new BufferedInputStream(new FileInputStream(sourcefile));
OutputStream os = new BufferedOutputStream(new FileOutputStream(destfile));
int len;
byte[] flush = new byte[1024];
while ((len=is.read(flush))!=-1){
os.write(flush,0,flush.length);
}
os.flush();
is.close();
os.close();
}
}
转换流
InputStreamReader
public class InputStreamReaderextends Reader
常用构造方法
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,Charset cs);
InputStremReader(InputStream in,String charsetName)
常用方法
String getEncoding() //返回此流使用的字符编码的名称
int read() //读取单个字符
int read(char[] cbuf,int offset,int length)
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符。每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。为了提高效率,可以考虑在BufferedReader内包装InputStreamReader,例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public class Conver {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:/io/a.txt")),"UTF-8"));
String info = null;
while(null != (info = br.readLine())){
System.out.println(info);
}
br.close();
}
}
OutputStreamWriter
OutputStreamWriter 是字符流通向字节流的桥梁,每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
常用构造方法
OutputStreamWriter(OutputStream out) //创建使用默认字符编码的OutputStreamWriter
OutputStreamWriter(OutputStream out,Charset cs) //创建使用给定字符集的OutputStreamWriter
常用方法
void close()
void flush()
void write(char[] cbuf,int off,int len) //写入字符数组的某一部分
write(int c) //写入单个字符
write(String str,int off,int len) //写入字符串的某一部分