gpt4 book ai didi

java - BufferedReader 中跳过和重置方法的一些实际用例是什么?

转载 作者:行者123 更新时间:2023-11-29 04:08:18 26 4
gpt4 key购买 nike

我想知道,BufferedReadermark()reset() 方法是什么?真的有用吗?

我明白他们在做什么,但是为了在某些文本中来回切换我从未使用过它们 - 通常我通过读取字符序列或数组中的整行或 StringBuilder 来回浏览。

我相信一定有一些原因为什么这些方法出现在 BufferedReader 和其他支持它的 Reader 实现中,但我无法假设原因。

与读取我们自己的数组中的数据并在其中导航相比,使用 mark()reset 是否有一些好处?

我搜索了我正在从事的一个大型项目的代码库(主要是使用 Spring BootJava 后端),其中有很多依赖项类路径和唯一使用标记和重置方法的东西(仅在极少数库中)是在文本文件的开头跳过可选的 BOM 字符。即使对于这个简单的用例,我也觉得这样做有点做作。

此外,我正在搜索其他教程和 Stackoverflow(例如 What are mark and reset in BufferedReader?),但找不到任何解释为什么要使用 mark & reset 实际解决这类问题。所有代码示例仅解释方法在“hello world”示例中执行的操作(无特殊原因从流中的一个位置跳回到之前的位置)。我在任何地方都找不到任何解释为什么有人应该实际使用它以及其他听起来更优雅而且性能并不差的方法。

最佳答案

我自己没有使用过它们,但我想到的一个案例是您想要将数据复制到需要正确调整大小的结构中。

当读取流并将数据复制到一个目标数据结构中时(可能是在解析之后),你总是会遇到这样的问题,即你不知道提前将你的目标设为多大。标记/倒带功能允许您标记、读取流、快速解析它以计算大小、重置、分配内存,然后重新解析复制这次的数据。当然还有其他方法可以做到这一点(例如,使用您自己的动态缓冲区),但是如果您的代码已经以 Reader 概念为中心,那么 mark/reset 可以让您保持原样。

也就是说,即使是 BufferedReader 自己的 readLine 方法也没有使用这种技术(它在内部创建了一个 StringBuffer)。

关于java - BufferedReader 中跳过和重置方法的一些实际用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56786948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com