【发布时间】:2009-11-18 21:28:53
【问题描述】:
我有一个 BufferedReader 循环文件。当我遇到特定情况时,我想使用不同的阅读器实例继续循环,但从此时开始。
对推荐的解决方案有任何想法吗?创建单独的阅读器,使用标记功能等?
【问题讨论】:
标签: java streamreader datareader
我有一个 BufferedReader 循环文件。当我遇到特定情况时,我想使用不同的阅读器实例继续循环,但从此时开始。
对推荐的解决方案有任何想法吗?创建单独的阅读器,使用标记功能等?
【问题讨论】:
标签: java streamreader datareader
在等待您对我的评论的答复时,我一直在做假设。
如果它是您重视的逐行输入,您可能会像我一样惊喜地发现RandomAccessFile 现在(从 1.4 或 1.5 开始)支持readLine 方法。当然,RandomAccessFile 可以让您对位置进行细粒度控制。
如果您想要缓冲 IO,您可以考虑将阅读器包裹在 CharacterBuffer 周围,或者将 ByteBuffer 包裹在使用 nio API 映射的文件周围。这使您能够将文件视为内存,并对读取指针进行精细控制。而且因为数据都在内存中,所以缓冲是免费的。
【讨论】:
RandomAccessFile :)
如果您跟踪到目前为止已阅读的字符数,您可以创建一个新的 BufferedReader 并使用skip。
正如 Noel 所指出的,您需要避免使用 BufferedReader.readLine(),因为 readLine() 会丢弃换行符并使您的字符计数不准确。如果其他人必须维护您的代码,您可能不应该指望 readLine() 永远不会被调用。
如果你决定使用skip,你应该编写自己的缓冲阅读器,它会给你一个偏移量来计算换行符。
【讨论】: