当前位置: 首页 > 知识库问答 >
问题:

BufferedWriter优势[复制]

冷善
2023-03-14

我有以下方法:

public void writeToFile(
  String id, 
  String no, 
  int systol, 
  int diastol, 
  int pulsDiff, 
  double speedAvg, 
  double spread
) { 
  String line = 
    id + "\t" + no + "\t" + systol + "/" + diastol + "\t" + pulsDiff 
    + "\t" + speedAvg + "\t" + spread + "\r\n";

    File fil = new File("resultat.txt");
    BufferedWriter writer = null;
    try { 
      writer = new BufferedWriter(new FileWriter(fil, true)); 
      writer.write(line); 
      writer.close();
    } catch (Exception e) {
      System.err.println("Fejl: " + e.getMessage());
    }

这可能是以不同的方式实现的吗?用不同的方法?这样做的好处是什么?

我试图理解拥有一个bufferedWriter的优势。我还在开始,我正在努力理解这句话:"

通常,写入程序会立即将其输出发送到底层字符或字节流。除非需要提示输出,否则建议将BufferedWriter包装在任何write()操作可能代价高昂的Writer周围,例如FileWriter和OutputStreamWriter。例如

 PrintWriter out    = new PrintWriter(new BufferedWriter(new 
     FileWriter("foo.out")));   

将PrintWriter的输出缓冲到文件中。如果没有缓冲,每次调用print()方法都会导致字符转换为字节,然后立即写入文件,这可能非常低效。

尤其是“一般来说,写入程序会立即将其输出发送到底层字符或字节流”部分。

共有3个答案

蓟捷
2023-03-14

使用BufferedReaderBufferedWriter的优点是减少了从磁盘读取和写入磁盘的物理次数。它利用缓冲系统,一次完成读/写操作。因此,效率更高。您可以尝试使用和不使用BufferedReader/BufferedWriter读取/写入一个大文件,并查看其区别。

谭曦
2023-03-14

假设您是一条与操作系统对话的Java指令。如果没有缓冲,情况就像(简化得多):

Java -> OS: Hello, operating system, I'd like to write character c to file F
OS -> HDD : Hello, disk, please append character c to file F
HDD -> OS after a few milliseconds : I'm done.
OS -> Java : Done

如果你在一个文件中写入了很多字符,这种交流是不必要的——它们仍然在谈论相同的内容,这是浪费时间!这就是我们使用缓冲区的原因。看看情况如何变化:

Java -> OS: Hello, operating system, I'd like to write bunch of characters c[] to file F
OS -> HDD : Hello, disk, please append characters c[] to file F
HDD -> OS after a few tens of milliseconds : I'm done.
OS -> Java : Done

期间。整个机器,所有磁盘寻求等等,只被调用一次。

和飞翔
2023-03-14

因为您正在向编写器写入单个字符串,所以在这种情况下缓冲是无用的。

不过,真正需要解决的是异常处理和关闭编写器的方式。如果写入或关闭未成功,则应使用异常警告调用方,而不是简单地记录错误并继续,就好像什么也没发生一样。

并且应该在finally块中关闭writer,或者使用try with resources构造,以确保它始终处于关闭状态。

 类似资料:
  • 本文向大家介绍lightgbm优势相关面试题,主要包含被问及lightgbm优势时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)更快的训练速度和更高的效率:LightGBM使用基于直方图的算法。2)更低的内存占用:使用离散的箱子(bins)保存并替换连续值导致更少的内存占用。3)更高的准确率(相比于其他任何提升算法):它通过leaf-wise分裂方法产生比level-wise分裂方法更

  • 前端工程化解决方案 模块加载器与构建工具双剑合璧,达到前端工程化解决方案的最优解。 前端模块加载器(coolie.js)服务于前端页面,与构建结果深度契合,甚至在未来 es6 模块化方案成熟之后,都可以一键切换。 前端开发构建工具(coolie-cli)服务于构建方面,与模块加载器深度契合,保证通用的构建前提下,又可以通过中间件来扩展构建过程。 与后端语言无关 coolie 的前端工程解决方案只与

  • 处理高性能和高效率的并发一直是部署nginx的主要优势。现在我们来了解有关Nginx更多的优点。 在过去几年中,Web架构师已经接受了将应用程序基础架构与Web服务器分离和分离的想法。 然而,以前以LAMP(Linux,Apache,MySQL,PHP,Python或Perl)为基础的网站的形式可能不仅仅是一个基于LEMP的(“E”代表“Engine x”)) ,但是越来越多地将网络服务器推送到基

  • 本文向大家介绍Python的优势:相关面试题,主要包含被问及Python的优势:时的应答技巧和注意事项,需要的朋友参考一下 1、Python 易于学习; 2、用少量的代码构建出很多功能;(高效的高级数据结构) 3、Python 拥有最成熟的程序包资源库之一; 4、Python完全支持面向对象; 5、Python 是跨平台且开源的。 6、动态类型:  

  • 问题内容: 在实践中,相比于innerHTML,使用createElement有什么优势?我之所以问是因为,我坚信使用innerHTML在性能和代码可读性/可维护性方面会更加有效,但是我的团队成员已经决定使用createElement作为编码方法。我只是想了解createElement如何更有效。 问题答案: 除了安全之外,使用其他方法还具有一些优点,而不是修改(而不是仅仅丢弃已有的内容并替换它)

  • Cocos2d-x 是 MIT 许可证下发布的一款功能强大的开源游戏引擎。 允许开发人员使用 C++、Javascript 及 Lua 三种语言来进行游戏开发。 支持所有常见平台,包括 iOS、Android、Windows、macOS、Linux。 引擎特性 现代化的 C++ API 立足于 C++ 同时支持 JavaScript/Lua 作为开发语言 可以跨平台部署, 支持 iOS、Andro