我正在編寫小型日志解析器,該解析器應該在文件中找到一些標簽。文件很大(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, etc.的末尾都有塊大?。ㄗ址麛?,而不是字節數)886, 16, 397, 26651。有些塊非常大,沒有大緩沖區就無法讀?。ㄈ绻沂褂胋ufio)。我想使用跳過不必要的塊file.Seek。問題是,file.Seek需要字節長度,并且我只有字符計數(塊可能具有帶兩字節字符的unicode數據)。有機會跳過使用字符計數的塊嗎?
1 回答

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
問題是文件.Seek需要字節長度,而我只有字符計數(塊可能具有帶兩個字節字符的unicode數據)。有機會跳過使用字符計數的塊嗎?
這實際上是不可能的。正如您描述的文件格式,以下兩種情況都是可能的:
...VersionInfo\1
[ 20 ]
...VersionInfo\1
[ C2 A0 ]
如果您剛剛讀過換行符,并且知道需要讀取一個字符,那么您知道它在1到2個字節之間(UTF-8字符甚至可以增加到4個字節),但不是一個,然后盲目地啟動一些數字字節數而不檢查中間數據將不起作用。病理情況是一個較大的塊,其中前半部分包含許多多字節字符,后半部分具有恰好看起來像您的輸入標頭之一的文本。
使用這種文件格式,您不得不一次讀取一個字符。
- 1 回答
- 0 關注
- 275 瀏覽
添加回答
舉報
0/150
提交
取消