【问题标题】:How to get a line from a large file if you know the offset如果您知道偏移量,如何从大文件中获取一行
【发布时间】:2012-04-04 13:15:59
【问题描述】:

该文件是一个 UTF8 文本文件。

每个字符有不同的字节数,每行有不同的字符数。

vb.net 是否有行号表到字节位置功能或类似的东西?

那之后怎么读?

【问题讨论】:

    标签: vb.net file file-io utf-8


    【解决方案1】:

    StreamReader 类是逐行读取文件的典型选择。它不保留它在文件中读取内容的任何历史记录,因此不知道最后一行在哪里结束或下一行将在哪里结束。当请求时(通过ReadLine),它只处理字符,直到到达新行字符串或文件末尾。

    我不知道 StreamReader 的实际实现,但我会假设它使用 Encoding 类来处理多字节编码,并且只维护一个可能预读数据的小缓冲区以提高读取性能(读取chunks 比你现在需要的 10 个字节要好)。任何其他缓冲区,例如当前行中的字符,都是需要它们的函数的本地变量,如 ReadLine

    如果您需要随机查找,您将需要使用BaseStream 属性为您自己生成一个行开始表,然后将该流查找到所需行的开头。从那里,您应该可以像往常一样使用ReadLine

    【讨论】:

    • 我注意到 streamreader 没有偏移属性。那是basestream开始的地方吗?是的,我想我需要行开始表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2019-06-07
    相关资源
    最近更新 更多