Java 中是否有一个类公开无缓冲的 readLine 方法?

2023-12-28

我正在清理工作中代码库的一些块,其中一个较旧的类用于读取和写入数据。该数据是 US-ASCII 编码字符串和二进制编码原语的混合。

当前的实现使用数据输入流 http://docs.oracle.com/javase/6/docs/api/java/io/DataInputStream.html,但正如您在文档中看到的readLine()由于与将字节转换为字符相关的问题,该方法已被弃用。虽然这个编码问题并没有真正出现在我们身上,但弃用是一个问题,因为它已经无法在 OpenJDK 7 的某些版本上运行,并且弃用意味着它将来可能会被完全删除。 “官方”替代方案是使用readLine from 缓冲读取器 http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html,但我们无法使用 DataInputStream 进行完全交换,因为 BufferedReader 无法真正处理二进制编码的原语。

“混合”这两个类的问题是,当 BufferedReader 缓冲流时,它会推进流标记。这意味着后续调用类似的方法readDouble()来自 DataInputStream 的操作将失败并出现 IOExceptions 或 EOFExceptions,因为流标记的实际位置不在应用程序逻辑上下文中“应该”位于的位置。

我研究了某种黑客mark()/reset()策略,但有时流由 FileInputStream 支持,它不支持mark()/reset().

除了更改我们的数据协议以将原语写为字符或编写我自己的实现之外readLine()(这令人惊讶地不平凡),有什么办法可以实现这一点吗?此时我什至愿意考虑外部库。


如果当前的代码库运行良好并且您唯一的问题是deprecation标签,我个人建议从readLine的方法DataInputStream类并将其移动到助手/实用程序类。这readLine的方法DataInputStream不使用很多实例变量,因此只需做一些工作,您应该能够很好地使用它。示例调用如下所示:Utils.readLine(dataInStream)。这将确保即使该方法被删除,您的代码库也不会受到影响。

是的,它很老套,是的,它看起来有点难看,但它是最快且可能是最安全的替代方案(对剩余代码库的更改最少)。

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

Java 中是否有一个类公开无缓冲的 readLine 方法? 的相关文章

随机推荐

  • Spyder 控制台 - 启动内核时发生错误

    Spyder 控制台显示错误消息 启动内核时发生错误 Traceback most recent call last File C Users ABCD Anaconda3 lib runpy py line 193 in run modu
  • 无法从 PreferenceFragment 显示 Snackbar

    我想在 Activity 托管的 PreferenceFragment 中使用 Snackbar onSharedPreferenceChange 偏好 xml
  • 如何获取多列分组中的第一个组?

    在应用 groupby 后 我一直在尝试弄清楚如何仅返回第一组 我的代码如下所示 gb df groupby col1 col2 col3 col4 col5 sum 我想要的是第一个第一组输出 我一直在尝试 get group 方法 但它
  • Facebook 响应错误中的 "error_subcode": 33 是​​什么意思?

    有谁知道这是什么意思error subcode 33 脸书回应错误 我知道这与任务许可有关 但我想百分百确定 我们收到以下错误 error message Unsupported get request Object with ID XXX
  • 如何将 Rails 应用程序从 2.3.5 升级到 3.2.x?

    我有 Rails 2 3 5 应用程序 我想升级到 3 2 x 如何升级到 Rails 3 2 x Thanks 我绝对推荐安装 Rails 升级 gem Rails升级宝石 https github com rails rails upg
  • 库中的 Google Script HTML 表单抛出错误 Uncaught

    我有一个 HTML 格式的库 如下所示 code gs function openDialog SpreadsheetApp getUi showModalDialog HtmlService createHtmlOutputFromFil
  • 正则表达式匹配除特定字符串之外的任何大写字符

    我想匹配所有包含大写字符的行 但忽略字符串A 为了增加复杂性 我想忽略不同字符串之后的所有内容 例如公开评论 以下是应该匹配和不应该匹配的示例 Matches fooBar 富酒吧富 A fooBar fooBar 注释 不匹配 C 不应触
  • 查询 Jira 中当前活动项目的所有问题

    我想创建一个在 Web 界面中处于活动状态的常规查询 为当前选定的项目选择所有问题 例如 如果我有两个项目 PROJ1 PROJ2 要选择 PROJ1 的所有问题 我将创建一个查询 Project PROJ1 但是 如果我有多个项目 我需要
  • Quartz Clustering - 服务器启动时重复触发器

    在集群设置 使用 JDBC 数据存储 中使用 Quartz 2 1 6 和 Spring 3 1 时 我们遇到了一个问题 当前背景 作业和 CRON 触发器在 spring 配置文件中定义 见下文 SchedulerFactoryBean
  • 使用 ColdFusion 将文件上传到 Google Drive

    新更新以获得更好的第二部分 现在进入 308 简历不完整 即使文件应该只是一次上传 我正在使用的基础cfgoogle来自雷 卡姆登 但谷歌已经弃用了文档上传的代码 新标准是可断点续传媒体上传 https developers google
  • 如何在 Windows 中为 Tomcat 设置 JAVA_OPTS?

    我正在尝试设置JAVA OPTS对于 Windows 计算机上的 Tomcat 但如果添加多个变量 我会不断收到错误消息 例如 这有效 set JAVA OPTS Xms512M 但这并不 set JAVA OPTS Xms512M Xmx
  • 如何在 Postgresql 中获取字符串中的当前月份和年份

    我想以字符串格式显示日期作为当前月份名称 字符串 和年份 例如 gt 2019 年 9 月 如何在 PostgreSQL 中为此编写查询 我尝试了这个查询 select date date trunc month current date
  • StackOverflowError 之前有多少次递归调用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有条件分箱

    是否可以在数据框中创建一个新列 其中 X 的容器基于另一列的值 下面的例子 AR1 PO1 和 RU1 的容器彼此不同 到目前为止 我只能获取 X 中所有值的容器 import pandas as pd import numpy as np
  • 无法在 Selenium Webdriver 中使用 send_keys 上传文件

    我在使用 Selenium Webdriver 和 Python 进行文件上传时遇到问题 我昨天重新安装了 selenium 和 python 所以我很确定一切都是最新的 如果有帮助的话 我正在使用 Windows 7 我知道其他人问过这个
  • Diesel 中多个外键引用同一个表

    我正在尝试创建一个引用同一个表两次的结构 这样做的目的是创建一种类别层次结构 这是我正在尝试对下表执行的操作 create table product category rollup id serial primary key upper
  • 分解/重构程序

    术语 分解不良 和 重构 程序是什么意思 你能举一个简单的例子来理解基本的区别吗 重构是一种通用技术 可以涉及许多任务 它通常意味着清理代码 消除冗余 提高代码质量和可读性 一个非常简单的例子分解不当 code do task1 abc d
  • 模板中公开的 kubernetes statefulsets 索引/序号

    Statefulsets 指示 kubectl kubernetes 创建 pod 其索引或序号跟在 pod 名称后面 例如 如果实体的名称为 redis 并且复制计数为 3 那么我们将得到 redis 0 redis 1 和 redis
  • 同一域上的 CloudFront 和 API 网关服务

    我想要 在我的域 www example com 上分发网站的静态部分 html css js 将 API Gateway 服务放在我的域上的文件夹 www example com v1 下 我该如何实现这个目标 在53号公路上 据我了解我
  • Java 中是否有一个类公开无缓冲的 readLine 方法?

    我正在清理工作中代码库的一些块 其中一个较旧的类用于读取和写入数据 该数据是 US ASCII 编码字符串和二进制编码原语的混合 当前的实现使用数据输入流 http docs oracle com javase 6 docs api jav