pub fn new_read(file: T) -> Self {
FileReader { file: Box::new(file), eof : false }
}
+ /// Constructs a new instance of `FileReader` using a boxed resource.
+ pub fn new_read_boxed(file: Box<T>) -> Self {
+ FileReader { file, eof : false }
+ }
+ /// Destroys the reader and releases the reader resource for a further use.
+ pub fn finish(self) -> Box<T> { self.file }
}
impl<T: Read+Seek> ByteIO for FileReader<T> {
if ret.is_err() { return Err(ByteIOError::ReadError); }
let sz = ret.unwrap();
if sz < buf.len() {
- if let Err(_err) = self.file.read(&mut buf[sz..][..1]) {
+ if let Err(_err) = self.file.read_exact(&mut buf[sz..][..1]) {
self.eof = true;
+ if sz == 0 {
+ return Err(ByteIOError::EOF);
+ }
} else {
return Ok(sz + 1);
}