3个不稳定版本
使用旧的Rust 2015
0.2.1 | 2019年2月26日 |
---|---|
0.2.0 | 2016年4月2日 |
0.1.0 | 2016年3月15日 |
#21 in #indexed
30 每月下载量
在 7 个crate中(2直接) 使用
13KB
234 行
indexed-line-reader
一个Rust库,用于将文件定位到特定行
lib.rs
:
索引行读取器
IndexedLineReader
实现了 Seek
trait,允许定位到特定行
索引粒度
IndexedLineReader
每 n
行存储一个字节数,以允许快速按行定位。可以通过将值传递给 IndexedLineReader
构造函数来配置粒度。
在索引占用的内存和定位速度之间有一个权衡,一般来说,较低的粒度意味着更多的行被索引和更高的内存消耗,但较快的定位时间,而较高的粒度会减慢定位时间,但内存中保留的索引较少。
例如,如果一个文件有1亿行,通常100,000的粒度在性能和内存消耗之间提供了一个良好的权衡。
示例
extern crate indexed_line_reader;
use indexed_line_reader::*;
use std::fs::*;
use std::io::{BufRead, BufReader, Seek, SeekFrom, Write};
/* Creates an IndexedLineReader for a file with index granularity of 100 */
let file_reader = OpenOptions::new().read(true).open("file.txt").expect("Unable to open file reader");
let mut indexed_line_reader = &mut IndexedLineReader::new(BufReader::new(file_reader), 100);
/* Seeks to line 100 from the start of the file */
indexed_line_reader.seek(SeekFrom::Start(100));
/* Seeks forward by 50 lines from the current position on the file */
indexed_line_reader.seek(SeekFrom::Current(50));
/* Seeks backward by 50 lines from the current position on the file */
indexed_line_reader.seek(SeekFrom::Current(-50));
/* Seeks to the 100th line from the end on the file */
indexed_line_reader.seek(SeekFrom::End(100));