一、处理流
用于增强功能,提高性能。位于节点流之上
1.缓冲流
- 字节缓冲流:
- BufferdeInputStream
- BufferedOutputStream
- 字符缓冲流:
- BufferedReader(新增readLine()方法)
- BufferedWriter(新增newLine()方法)
要使用新增方法就不能用多态了
缓冲流使用方法:缓冲流(节点流) 包裹节点流。建议使用缓冲流提高性能。
字符缓冲流示例
public static void copy(File src, File dest) throws IOException {
// 选择流,这里测试新方法,声明就不能用多态了。
BufferedReader bread = new BufferedReader(new FileReader(src));
BufferedWriter bwrite = new BufferedWriter(new FileWriter(dest));
// 用来临时储存数据的字符串
String str;
// 操作,读取在while里就读了
while (null != (str = bread.readLine())) {
bwrite.write(str);
// 类似于\r\n
bwrite.newLine();
// 刷新是个好习惯
bwrite.flush();
}
// 关闭资源
bwrite.close();
bread.close();
}
<br />
二、转换流
字节流转换为字符流,处理乱码(编码集,解码集)
- 输入流:InputStreamReader(编码)
- 输出流:OutputStreamWriter(解码)
使用:转换流(字节流) 即可转为字符流来使用
编码转码测试
算了,太简单,直接看转换流的程序。也是拷贝,同时使用了两种流
public static void main(String[] args) throws IOException {
File f=new File("F:/javaIotest/213.txt");
File dest=new File("F:/javaIotest/诗歌.txt");
//InputStreamReder和OutputStreamWriter 字节流转换为字符流,可以在形参里选择编码|解码集
//这里选择gbk即Ascall码编码,即读取的文件是gbk格式的,如果不选择直接使用utf-8的话会乱码,怎么输出都不对啦。读取都错了
BufferedReader is=new BufferedReader(new InputStreamReader(new FileInputStream(f)));
//解码使用默认的平台解码,我这里是utf-8,可以选择任何格式输出。
BufferedWriter os=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dest)));
String str;
while(null!=(str=is.readLine())){
os.write(str);
os.newLine();
os.flush();
}
os.close();
is.close();
}