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

在java中正确使用缓冲阅读器读取文件

杜炫明
2023-03-14

我有以下代码来读取java文件,并打印出行。我通过两种方式实现了它:

使用流:

List<String> list = new ArrayList<>();
try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
    list = br.lines().collect(Collectors.toList());
    Map<String, Long> totalCount = list.stream() .....

使用循环:

  try (FileReader reader = new FileReader(file);
             final BufferedReader bufferedReader = new BufferedReader(reader)) {
            String line;
            while ((line = bufferedReader.readLine()) != null) {.. }

我被告知这是错误的,使用缓冲读取器是错误地使用了语言的特性。有没有更好的方法,我想知道使用语言功能的正确方法。

共有1个答案

屠浩
2023-03-14

这两个例子做了两件稍微不同的事情。关键的区别是第一个解决方案首先将所有行读取到内存中,然后迭代这些行。

第二个例子逐行读取文件,这意味着它的内容可以逐行处理。

第一种方法:易于书写、阅读和理解。但是:如前所述,它会将整个文件读入内存。这对于小文件来说不是问题,但对于真正大的文件,这可能会产生各种问题(读取大文件需要时间,对于真正大的文件,可能会耗尽内存)。

这两种方法之间的另一个区别是更“风格”,其中:br。lines()已经为您提供了一个,首先将这些行收集到一个列表对象中,然后将其流化是没有任何意义的。

 类似资料:
  • 本文向大家介绍Java缓冲读取器,包括了Java缓冲读取器的使用技巧和注意事项,需要的朋友参考一下 示例 介绍 该BufferedReader班是以外的包装Reader是有两个主要目的类: ABufferedReader为包装的提供缓冲Reader。这允许应用程序一次读取一个字符,而不会产生过多的I / O开销。 一个BufferedReader用于一次读取文本行提供的功能。 使用Buffered

  • 问题内容: 我有以下从缓冲读取器读取数据的示例: 每当缓冲读取器中出现某些情况时(在这种情况下),将执行循环中的代码。在我的情况下,如果客户端应用程序将某些内容写入套接字,则将执行循环中的代码(服务器应用程序中)。 但是我不明白它是如何工作的。等待直到缓冲读取器中出现某些内容,当其中出现某些内容时,它将返回并执行循环中的代码。但是什么时候可以退货。 还有另一个问题。上面的代码摘自一个方法,我在线程

  • 问题内容: 我有一个线程可以从缓冲读取器读取字符(该读取器是从套接字创建的,如下所示): 此代码只能运行一次。例如,如果客户端连接并发送此消息:“这是一个测试”和“这是另一个测试”,则主机输出为: 请注意该程序不会收到“这是另一个测试”,因为它停留在读取流上。有什么办法在不减小缓冲区大小的情况下解决这个问题?这是线程的代码: 客户/发送者的代码(不是我的代码): 问题答案: 是一个 阻塞 调用,这

  • 问题内容: 为了寻求帮助,我目前已编写了HTTP服务器。目前,它可以很好地处理GET请求。但是,在使用POST时,缓冲的读取器似乎挂起。当请求停止时,其余输入流将通过缓冲的读取器读取。我在Google上找到了一些东西。我尝试将CRLF和协议版本从1.1更改为1.0(浏览器会自动将请求发送为1.1),任何想法或帮助将不胜感激。谢谢 问题答案: 这不安全!但是显示了如何在初始HTTP标头之后的输入流中

  • 我在读这样一个文件: 文件如下所示: 我是这样分析的: 这里没有显示与每一行相关的代码。对于某些行,我想跳回到某个行号,并再次继续阅读文件。最好的方法是什么?我必须创建另一个读取器并跳过行,直到我感兴趣的特定行吗?我正在沿着这篇文章的思路看,但我想继续阅读文件的其余部分。

  • 我的目标是用扩展名解析协议缓冲区文件。pb。一串在Mac上使用自制软件下载Protobuff。运行protoc--版本,并具有libprotoc 3.1.0版本。 但当我运行Python时,它会说找不到模块。我改变了主意。pb文件名到\u pb2。py并在Python脚本中导入模块。 我正在使用谷歌文档,但仍然没有任何运气。我在编译Protobuf时也遇到了问题。so文件通过Python。我只是无