鱼C论坛

 找回密码
 立即注册
查看: 3393|回复: 5

[已解决]求助!关于Java的I/O流的缓冲区问题

[复制链接]
发表于 2018-11-25 10:25:17 | 显示全部楼层 |阅读模式
5鱼币
import java.io.*;

public class third_1 
{
        public static void main(String[] args)
        {
                try
                {
                        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                        BufferedWriter writer = new BufferedWriter(new FileWriter("mytext1.txt"));
                        BufferedReader reader = new BufferedReader(new FileReader("mytext1.txt"));
                        String inputLine;
                        System.out.println("请开始输入:");
                        while((inputLine = in.readLine()) != null)
                        {
                                writer.write(inputLine);
                                writer.newLine();
                        }
                        in.close();
                        System.out.println("文件中写入的数据为:");
                        String outputLine;
                        writer.flush();         //刷新此输出流并强制将所有缓冲的输出字节被写出   
                        while((outputLine = reader.readLine()) != null)
                        {
                                System.out.println(outputLine);
                        }
                        in.close();
                        writer.close();
                        reader.close();
                }
                catch(FileNotFoundException e)
                {
                        System.err.println("cannot open in.txt");
                }
                catch(IOException e)
                {
                        System.out.println("IOException: " + e);
                }
                                        
        }
}

该程序要实现的功能

该程序要实现的功能

代码这样写时可是实现所要求的的功能,但是在将writer.flush()注释掉以后,输入的内容还可以写到文件中,但是却读不出来,自己查了一下flush()的功能,感觉还是不太理解,这个时候不是已经写入文件了吗,从文件里不可以直接读吗?
最佳答案
2018-11-25 10:25:18
第一次玩论坛,不知道回答的帖子去哪了,再回一次吧。
flush的作用是将缓存区的数据写入内存,close是关闭流,但在关闭前会将缓存区的内容写入内存,所以就造成了你看到的现象,数据明明写入了文件为什么查不到呢。只要你输入流读取的语句在输出流的flush或close方法后你才能读到内存中的数据

最佳答案

查看完整内容

第一次玩论坛,不知道回答的帖子去哪了,再回一次吧。 flush的作用是将缓存区的数据写入内存,close是关闭流,但在关闭前会将缓存区的内容写入内存,所以就造成了你看到的现象,数据明明写入了文件为什么查不到呢。只要你输入流读取的语句在输出流的flush或close方法后你才能读到内存中的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-25 10:25:18 | 显示全部楼层    本楼为最佳答案   
第一次玩论坛,不知道回答的帖子去哪了,再回一次吧。
flush的作用是将缓存区的数据写入内存,close是关闭流,但在关闭前会将缓存区的内容写入内存,所以就造成了你看到的现象,数据明明写入了文件为什么查不到呢。只要你输入流读取的语句在输出流的flush或close方法后你才能读到内存中的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-26 14:37:23 | 显示全部楼层
你是指System.out.prientln(outputLine)这里读不到东西吧!既然你读了flush的功能,你应该知道他是立即讲缓存区的东西提交到内存中的,你把他注释掉,那你写的内容依旧在缓存区内,所以你读不到任何东西,因为此时内存中没有东西,都在缓存区内,而你读完,结束时调用的close方法会在关闭前将缓存区的数据写入内存,所以你可以看到数据写入了文件,却在程序中读不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-26 14:38:43 | 显示全部楼层
咦,我回答的帖子呢???今天刚来鱼C,等级低不等回答吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-11-28 18:41:59 | 显示全部楼层
戴帽子的猪 发表于 2018-11-25 10:25
第一次玩论坛,不知道回答的帖子去哪了,再回一次吧。
flush的作用是将缓存区的数据写入内存,close是关闭 ...

搞明白了,谢谢哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 05:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表