BufferedReader.ready() 方法是否确保 readLine() 方法不返回 NULL?

2024-02-17

我有这样的代码来读取文本文件BufferedReader:

BufferedReader reader=null;
    try {
        reader = new BufferedReader(new FileReader("file1.txt"));

        while (reader.ready()) {
            final String line = reader.readLine();
            System.out.println("<"+line+">");
        } catch (..)
    {
        ...
    }

它工作正常,但 Findbugs 报告警告:

NP_DEREFERENCE_OF_READLINE_VALUE : 调用 readLine() 的结果是 取消引用而不检查 如果结果为空。如果没有 要读取更多行文本,readLine() 将返回 null 并取消引用 这将生成一个空指针 例外。

当我改变时FileReader to StringReader, i.e.

BufferedReader reader=null;
    try {
        reader = new BufferedReader(new StringReader("ABCD"));

        while (reader.ready()) {
            final String line = reader.readLine();
            System.out.println("<"+line+">");
        } catch (..)
    {
        ...
    }

the readLine方法返回nullready方法总是返回true- 这确实是一个无限循环。

这似乎是readLine可能会回来null即使ready回报true。但为什么不同的行为会有所不同Readers?

UPDATE:

我确实知道读取文本文件的正常方法(就像彼得和阿里所示)。但我读了我同事的那段代码并意识到我不知道ready方法。然后我读了JavaDoc,但不明白block。然后我做了一个测试并发布了这个问题。因此,提出这个问题的更好方法可能是:

什么时候输入会被阻塞?如何使用ready方法(或者为什么不使用它)?为什么那2个Readers (FileReader and StringReader)的行为有所不同ready method?


Ready 方法告诉我们 Stream 是否准备好被读取。

想象一下您的流正在从网络套接字读取数据。在这种情况下,流可能尚未结束,因为套接字尚未关闭,但它可能尚未准备好接收下一个数据块,因为套接字的另一端尚未推送任何更多数据。

在上面的场景中,在远程端推送数据之前我们无法读取更多数据,因此我们必须等待数据可用,或者套接字关闭。 Ready() 方法告诉我们数据何时可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BufferedReader.ready() 方法是否确保 readLine() 方法不返回 NULL? 的相关文章

随机推荐

  • 查找字符串中字符的所有位置

    我正在尝试使用非常基本的技能集查找 python 字符串中字符的所有索引号 例如 如果我有字符串 Apples are Excellent 并且我想找到字符串中 a 所在的位置 我理想的输出是 0 7 14 19 这些是字符串中出现 a 的
  • 无法再次绑定多部分标识符

    我正在尝试创建一个这样的存储过程 CREATE PROCEDURE dbo SP Name ID varchar 50 URL varchar 256 AS SELECT DISTINCT Table1 CID Table2 Name Ta
  • 如何从一个docker容器到另一个docker容器执行命令

    我正在创建一个应用程序 允许用户上传视频文件 然后对这些文件进行一些处理 我有两个容器 Nginx为网站提供服务的容器 用户可以在其中上传视频文件 视频处理容器具有FFmpeg并安装了一些其他处理工具 我想要实现什么 我需要容器 1 才能在
  • 返回设备 3.1 中的设备确认令牌

    现在 Devise 已从数据库中删除了 confirmation token 我如何在 rspec 中返回 devise 确认令牌 我试图通过使用确认令牌手动访问 user confirmation 路径来测试可确认模块 我怎样才能实现这个
  • asp.net 中缓存密钥长度

    我正在研究 MVC3 源代码 并发现了以下内容 在 OutputCacheAttribute cs 中 该内容在生成用于输出缓存的密钥时被调用 The key is typically too long to be useful so we
  • 什么是 Oracle ADF?

    什么是 Oracle ADF 我在网上找到了如下定义 ADF 集成了多种子框架来提供关键功能 对象关系映射和其他形式的服务访问 数据 绑定和用户界面 以及用于固定的功能胶 这一切都在一起 ADF 代表 应用程序开发框架 它是由 Oracle
  • UITextField secureTextEntry 项目符号具有自定义字体吗?

    我正在使用自定义字体UITextField 其中有secureTextEntry打开 当我在单元格中输入时 我会看到项目符号采用我选择的字体 但是当字段失去焦点时 这些项目符号将恢复为系统标准字体 如果我再次点击该字段 它们就会变回我的字体
  • 从普通图像创建鱼眼效果的算法

    我正在尝试创建一个 OpenGL 片段着色器 将普通图像转换为包含鱼眼效果的图像 这就是我所说的鱼眼效果 http www marcofolio net photoshop create a fish eye lens effect in
  • 如何检查鼠标是否位于 jQuery 中的元素上?

    有没有一种快速简单的方法可以在 jQuery 中实现我所缺少的功能 我不想使用鼠标悬停事件 因为我已经将其用于其他用途 我只需要知道鼠标在给定时刻是否位于某个元素上 我想做这样的事情 如果有一个 IsMouseOver 函数 functio
  • 正向工程师在 MySQL Workbench 中不执行任何操作

    我的经验很少MySQL Workbench并需要一些帮助来解决问题 我从以下位置加载了新的 EER 图 MWBGUI 中的文件并试图将其转换为SQL with Forward engineer 最初 我连接到localhost当我按下For
  • Reactjs 和 Rxjs 有什么区别?

    基本上我开始学习 Rxjs 我对 React 和 Rxjs 有点困惑 我以为 Reactjs 和 Rxjs 是一样的 问题 如果 Reactjs 和 Rxjs 是相同的 那么为什么我们使用 Reactjs 而不是 Rxjs 反之亦然 如果
  • 如何将多个查询参数映射到 Jersey GET 请求上的 bean 字段?

    一个服务类有一个 GET接受多个参数的操作 这些参数作为查询参数传递给 GET服务电话 GET Path find Produces MediaType APPLICATION XML public FindResponse find Qu
  • MySQL 查询 - 仅使用条目的最新版本的内连接

    我有一张表 名为jobs与各种信息 每个作业都有一个作业编号 唯一的 ID 然后还有另一个表 名为purchaseOrders具有 jobID 的 FK 和 poID 的 PK 编辑采购订单条目时 旧信息将被保存 这意味着 我创建了一个新的
  • 无法使用 ionic cli 1.3.2 添加人行横道

    我从 git 克隆了一个现有的 ionic 项目 我有ionic 1 3 2 and cordova 4 2 0 克隆后 我cd编辑到目录中并执行了ionic browser add crosswalk 表示人行横道添加成功 然后当我尝试做
  • 从background-image属性中获取URL

    我怎样才能从background image属性中获取URL 现在我这样做 window getComputedStyle element getPropertyValue background image replace url repl
  • 在 Visual Studio 中打开文件的特定行号

    我有一个实用程序 grep 它给我一个文件名列表和行号 在确定 devenv 是打开文件的正确程序后 我想确保它在指定的行号处打开 在 emacs 中 这将是 emacs 140 filename c 我在 Visual Studio de
  • R 中带有背景颜色的文本标签

    我想知道是否有一种简单的方法可以使用基本图形系统将具有对比背景的文本标签添加到 R 图中 直到现在我一直使用rect 一起发挥作用graphics strheight and graphics strwidth 单独创建背景框 然后在其上放
  • 问题 C1083:无法打开包含文件:“chrono”:没有弹出这样的文件或目录

    我正在尝试编写一个程序 使 6 个数字随机出现 这是我的 pro 文件 QT core gui greaterThan QT MAJOR VERSION 4 QT widgets TARGET Lotto TEMPLATE app CONF
  • 使用 CodedUI 测试测试 WPF 应用程序,编码的 ui 测试项目是否应该共享解决方案?

    首先一些背景知识 我们正在 NET 4 5 中开发一个大型桌面 WPF 应用程序 目标是 64 位 Windows 7 和 8 我们使用 Visual Studio 2012 2 很快将成为 3 然后可能是 2013 年 和 TFS 201
  • BufferedReader.ready() 方法是否确保 readLine() 方法不返回 NULL?

    我有这样的代码来读取文本文件BufferedReader BufferedReader reader null try reader new BufferedReader new FileReader file1 txt while rea