当前位置: 首页 > 面试题库 >

何时刷新BufferedWriter

洪飞龙
2023-03-14
问题内容

在Java程序(Java 1.5)中,我有一个BufferedWriter,它包装了Filewriter,并且多次调用write()…结果文件很大…

在此文件的各行中,其中一些是不完整的…

我每次写东西时都需要调用flush(但是我怀疑这样做效率不高)还是使用BufferedWriter的另一种方法还是使用另一种类…?

(由于我要编写的行数不胜数,所以我确实希望有一些高效的东西。)理想的“冲洗”时刻是什么?(当我达到BufferedWriter的容量时)…

在里面:

try {
  analysisOutput = new BufferedWriter(new FileWriter(
      "analysisResults", true));
  analysisOutput.newLine();
  analysisOutput.write("Processing File " + fileName + "\n");
} 
catch (FileNotFoundException ex) {
  ex.printStackTrace();
} 
catch (IOException ex) {
  ex.printStackTrace();
}

写作:

private void printAfterInfo(String toBeMoved,HashMap<String, Boolean> afterMap, Location location)
  throws IOException {
    if(afterMap != null) {
      for (Map.Entry<String, Boolean> map : afterMap.entrySet()) {
        if (toBeMoved == "Condition") {
          if (1 <= DEBUG)
            System.out.println("###" + toBeMoved + " " + location + " "
                + conditionalDefs.get(conditionalDefs.size() - 1)
                + " After " + map.getKey() + " "
                + map.getValue() + "\n");

          analysisOutput.write("###" + toBeMoved + " " + locathtml" target="_blank">ion + " "
              + conditionalDefs.get(conditionalDefs.size() - 1)
              + " After " + map.getKey() + " " + map.getValue()
              + "\n");
        } else {
          if (1 <= DEBUG)
            System.out.println("###" + toBeMoved + " " + location + " "
                + map.getKey() + " After " 
                + map.getValue() + "\n");
          if (conditionalDefs.size() > 0)
            analysisOutput.write("###" + toBeMoved + " " + location + " "
                + conditionalDefs.get(conditionalDefs.size() - 1) + " "
                + map.getKey() + " After " + map.getValue()
                + "\n");
          else
            analysisOutput.write("###" + toBeMoved + " " + location + " " + map.getKey() + " After " + map.getValue() + "\n");


        }
      }
    }

我刚刚发现不完整的行就是“正在处理文件”之前的行…因此,当我从一个要分析的文件切换到另一个文件时,就会发生该行…

闭幕:

dispatch(unit);

try {
  if (analysisOutput != null) {
    printFileInfo();
    analysisOutput.close();
  }
} 
catch (IOException ex) {
  ex.printStackTrace();
}

有时,由printFileInfo打印出的信息不会出现在结果文件中。


问题答案:

BufferedWriter当它填充它的缓存就会刷新已。来自的文档BufferedWriter.write

通常,此方法将给定数组中的字符存储到此流的缓冲区中, 并根据需要将缓冲区刷新到基础流

(强调我的。)

BufferedWriter基本上,目的是将大量的小写合并为更少的大写,因为通常这样做效率更高(但更难于编写代码)。但是,除了确保在 完成处理后将
其刷新之外,您无需执行任何特殊操作即可使其正常工作,并且调用close()将这样做并无论如何都刷新/关闭底层编写器。

换句话说,放松-
只需写,写,写和关闭:)通常,flush您真正需要手动调用的唯一时间是真正需要将数据现在存储在磁盘上。(例如,如果您有一个永久记录器,则可能要经常刷新它,以使正在阅读日志的人不必等到缓冲区已满就可以看到新的日志条目!)



 类似资料:
  • 问题内容: 如果将新文档索引到Elasticsearch索引,则可在索引操作后1秒钟左右搜索新文档。但是,可以通过调用或对索引进行操作来强制使该文档可立即搜索。这两个操作之间有什么区别- 结果似乎对他们来说是相同的,可以立即搜索文档。 这些操作中的每一项到底是什么? ES文档似乎并未深入解决此问题。 问题答案: 您得到的答案是正确的,但我认为值得详细说明。 刷新有效地调用了Lucene索引读取器上

  • 问题内容: 线程1:正在执行此循环 线程2将运行错误设置为假如果运行是易失性变量,则线程1退出循环并显示“完成”。 我的问题是,如果运行不是易失的,那么Thread1何时从主内存中读取运行变量? 注意:我很了解同步和volatile变量之间的关系,但是即使运行不是volatile或同步的,线程1也会停止。所以我的问题是,鉴于没有同步或没有波动,线程1什么时候决定从主存储器读取数据 问题答案: 这在

  • 我用碎片制作了一个mediaplayer应用程序;歌曲、专辑、艺术家、流派、播放列表 这是我的一个片段中的代码,我将以艺术家为例 在我的initRecyClaire View()方法中,我有一个名为“项目”的数组列表,其中包含歌曲艺术家。Main.songs.get艺术家- 现在,当用户点击一个艺术家时,另一个活动将启动ListSong sActivity.java 这是类中的代码ListSong

  • google oauth2刷新令牌何时过期? 我所说的过期是指过期是因为经过了某个时间跨度(不是因为用户已撤销访问权限或用户已请求新的刷新令牌) 我做了一些研究,没有一个引用官方的谷歌文档(我也找不到一个有效的谷歌文档) 其他一些问题表示,由于时间,它从未过期: 谷歌刷新令牌过期了吗? https://community.fitbit.com/t5/web-api-development/inva

  • 2.12 刷新 2.12.1 描述 此接口用于增加内容刷新任务 2.12.2 请求地址 地址: https://api.bokecs.com/cont/add_refresh 2.12.3 请求方式 POST 2.12.4 请求参数 1) 请求入参 Urls 待刷新的链接 2)请求出参 { "code": "", "message": "" } code:接口响应代码。200表示成功。 mess

  • 我正在尝试访问授权服务器,该服务器在用户提供用户名和密码时发出短期访问令牌和长期刷新令牌。 < li >客户端是应该在每次调用API时将刷新令牌与访问令牌一起传递,还是应该仅在从API收到访问令牌已过期的错误代码时才传递刷新令牌? < li >刷新令牌过期后,什么类型的错误代码会传回客户端?这意味着客户端需要通过再次传递用户名和密码来请求新的访问令牌。