登录
首页 >  Golang >  Go问答

使用两字节字符进行文件查找

来源:stackoverflow

时间:2024-03-05 19:45:28 271浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《使用两字节字符进行文件查找》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我正在编写小型日志解析器,它应该在文件中找到一些标签。 文件很大(512mb)并且具有以下结构:

[2018.07.10 00:30:03:125] VersionInfo\886
...some data...
[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->IncomingTime\16
...some data...
[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->IncomingData\397
...some data...
[2018.07.10 00:30:03:749][TraceID: 8HRWSI105YVO91]->OutgoingData\26651
...somedata...

每个块incomingtime、incomingdata、outgoingdata等。在末尾有块大小(字符数,而不是字节)886、16、397、26651。有些块非常大,没有大缓冲区就无法读取(如果我使用 bufio)。我想使用 file.seek 跳过不必要的块。

问题是 file.seek 需要字节长度,而我只有字符数(块可能有带有两字节字符的 unicode 数据)。是否有机会使用字符计数来跳过块?


解决方案


问题是 file.seek 需要字节长度,而我只有字符数(块可能有带有两字节字符的 unicode 数据)。是否有机会使用字符计数来跳过块?

这实际上是不可能的。正如您所描述的文件格式,以下两种格式都是可能的:

...VersionInfo\1
[ 20 ]
...VersionInfo\1
[ C2 A0 ]

如果你刚刚读取了换行符并且知道需要读取一个字符,你知道它在 1 到 2 个字节之间(utf-8 字符甚至可以达到 4 个字节),但不知道是哪个字符,然后盲目启动在不检查中间数据的情况下转发一定数量的字节是行不通的。病态的情况是一个较大的块,其中前半部分有许多多字节字符,后半部分的文本恰好看起来像您的条目标题之一。

使用这种文件格式,您必须一次读取一个字符。

好了,本文到此结束,带大家了解了《使用两字节字符进行文件查找》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>