请问字符流中没有涉及到缓存区,为什么需要使用flush()方法呢?

请问字符流中没有涉及到缓存区,为什么需要使用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();
        }
        

    }

}

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,同学指的是如下OutputStreamWriter的flush吗,如果是,OutputStreamWriter表示的是转换流,是字符流通向字节流的桥梁,是有缓冲区的,所以调用flush是刷新了该缓冲

http://img1.sycdn.imooc.com//climg/5fa4b64809a5ab3107150442.jpg

而FileOutputStream是文件输出流,没有缓冲区,所以也就没有flush方法

没有缓冲区的流是没有flush方法的,所以并不是用了write方法后都需要加flush,一般是带有缓冲区的流都建议加上flush方法

祝学习愉快


小曼巴0 提问者 2020-11-05 21:29:46

之前介绍FileOutputStream类时,调用write方法之后没使用使用flush是不是因为使用了close?

是不是只要是用了write方法都最好跟一个flush?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师