如何高效地从海量文本文件(> 10 GB)中检索最后 10 行
显示大量文本文件的最后 10 行文本文件可能具有挑战性,尤其是当文件大小超过 10 GB 时。要获得有效的解决方案,请考虑以下方法:
首先,遍历文件到末尾。接下来,系统地向后移动,搜索 10 个连续的换行符。找到后,继续阅读结论,注意不同的字符编码。
通过适当调整流程来处理文件少于 10 行的场景。下面是 C# 中的实现:
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { int sizeOfChar = encoding.GetByteCount("\n"); byte[] buffer = encoding.GetBytes(tokenSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 tokenCount = 0; Int64 endPosition = fs.Length / sizeOfChar; for (Int64 position = sizeOfChar; position < endPosition; position += sizeOfChar) { fs.Seek(-position, SeekOrigin.End); fs.Read(buffer, 0, buffer.Length); if (encoding.GetString(buffer) == tokenSeparator) { tokenCount++; if (tokenCount == numberOfTokens) { byte[] returnBuffer = new byte[fs.Length - fs.Position]; fs.Read(returnBuffer, 0, returnBuffer.Length); return encoding.GetString(returnBuffer); } } } // Handle the case where the file has fewer than numberOfTokens lines fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); } }
此方法会动态调整文件中的实际标记数量,使其对具有不同行数的文件有效。
以上是如何高效读取大文本文件的最后10行?的详细内容。更多信息请关注PHP中文网其他相关文章!