请问字符流中没有涉及到缓存区,为什么需要使用flush()方法呢?
# 具体遇到的问题
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
package pers.snail.chars;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class CharDemo {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("imooc.txt");
InputStreamReader isr = new InputStreamReader(fis); //从字节输入流中读取数据转换成字符输入流
FileOutputStream fos = new FileOutputStream("imooc1.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");//读写数据时要保持编码格式的一致
int n = 0;
char[] ch = new char[10]; //此处不再是byte类型而是char类型
//读文件
// while((n=isr.read())!=-1) { //第一种读法,一次读取一个字节
// System.out.print((char)n);
// }
// while((n=isr.read(ch))!=-1) { //第二种读法,一次读取ch.length个字节
// String s = new String(ch,0,n); //参数含义与write(b,off,n)相同
// System.out.print(s);
// }
//写文件
while((n=isr.read(ch))!=-1) {
osw.write(ch,0,n);
}
osw.flush();
osw.close();
fos.close();
isr.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
}
在这里输入代码,可通过选择【代码语言】突出显示
正在回答
同学你好,同学指的是如下OutputStreamWriter的flush吗,如果是,OutputStreamWriter表示的是转换流,是字符流通向字节流的桥梁,是有缓冲区的,所以调用flush是刷新了该缓冲
而FileOutputStream是文件输出流,没有缓冲区,所以也就没有flush方法
没有缓冲区的流是没有flush方法的,所以并不是用了write方法后都需要加flush,一般是带有缓冲区的流都建议加上flush方法
祝学习愉快
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星