Expand description
This library provides the ByteSeeker type to seek the occurences of
a given byte slice (&[u8]) from either end of a stream of bytes.
The ByteSeeker is helpful if you want to check the presences of a certain byte slice, or
you want to read partial of contents when you know where to start.
§Examples
- Read the last line of a file, without loading the entire file into memory.
use byteseeker::{ByteSeeker, Result};
use std::io::{Read, Seek, SeekFrom};
use std::fs::File;
fn read_last_line(f: &mut File, buf: &mut Vec<u8>) -> Result<()> {
let mut seeker = ByteSeeker::new(f);
let pos = seeker.seek_back(b"\n")?;
let starting = if pos == seeker.len() - 1 {
// if file ends with a newline.
seeker.seek_back(b"\n")? + 1
} else {
// if file doesn't end with a newline.
pos + 1
};
f.seek(SeekFrom::Start(starting as u64))?;
f.read_to_end(buf)?;
Ok(())
}
fn main() -> Result<()> {
let mut f = File::open("./data.csv")?;
let mut buf = Vec::new();
read_last_line(&mut f, &mut buf)?;
// For simplicity, we just assume the given file is UTF-8 valid and unwrap the result here.
println!("{}", std::str::from_utf8(&buf).unwrap());
Ok(())
}
Structs§
- Byte
Seeker - Seeker that can seek the occurences of a given byte slice within a stream of bytes.
- Error
- An error that can occur when seeking bytes.
Enums§
- Error
Kind - The specific type of an error.
Type Aliases§
- Result
- A type alias for
Result<T, byteSeeker::Error>.