文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
io
I/O 核心特征定义,及辅助函数。
+------+ +-------+ +------+ | Read | | Write | | Seek | +------+ +-------+ +------+ | | | +-- Stdin +-- Stdout +-- File | | | +-- File +-- Stderr +-- BufReader<R> | | | +-- TcpStream +-- File +-- BufWriter<W> | | | | +---------+ +-- TcpStream +-- Cursor<T> +-- | BufRead | | +---------+ +-- Vec<u8> | | +-- BufReader<R> +-- BufWriter<W> | | +-- Cursor<T> +-- Cursor<T> | +-- StdinLock
Reader
和Writer
没有close
方法,通常以Drop
自动关闭。BufReader
和BufWriter
默认8 KB
缓冲区,可用with_capacity
指定。BufWriter.Drop
会写入剩余缓冲数据,但忽略错误,建议调用flush
方法。
write!
和writeln!
向Writer
写入格式化字符串。print!
和eprint!
需要调用flush
,确保行缓冲输出。
pub type Result<T> = Result<T, Error>;
用 Cursor<&[u8]>
、 Cursor<&mut [u8]>
、 Cursor<Vec[u8]>
读写内存字节数据。
[u8]
固定大小,Vec[u8]
按需扩张。
use std::io::prelude::*; use std::io::{ self, Cursor }; fn main() { let src = [1, 2, 3, 4, 5, 6, 7]; let mut buf = Cursor::new(&src[..]); (|| -> io::Result<()> { let mut dst = [0; 2]; loop { let n = buf.read(&mut dst)?; if n == 0 { return Ok(()); } println!("{:?}:{:?}", n, &dst[..n]); } })().unwrap(); } /* 2:[1, 2] 2:[3, 4] 2:[5, 6] 1:[7] */
use std::io::prelude::*; use std::io::{ self, Cursor, SeekFrom }; fn main() { let mut src = [0u8; 100]; let mut dst = [0u8; 5]; let mut buf = Cursor::new(&mut src[..]); (|| -> io::Result<()> { // write buf.seek(SeekFrom::Start(1))?; let n = buf.write(&[2, 3])?; assert_eq!(n, 2); assert_eq!(buf.get_ref()[..3], [0, 2, 3]); // read buf.seek(SeekFrom::Start(0))?; let n = buf.read(&mut dst)?; assert_eq!(n, dst.len()); assert_eq!(dst, [0, 2, 3, 0, 0]); Ok(()) })().unwrap(); }
错误处理。
use std::io::prelude::*; use std::io::{ self, Cursor, ErrorKind }; fn main() { (|| -> io::Result<()> { let mut buf = Cursor::new(&[1, 2, 3, 4][..]); let mut dst = [0; 10]; // 数据不足以填充 dst 时返回错误。 buf.read_exact(&mut dst)?; Ok(()) })().unwrap_or_else(|e| { match e.kind() { ErrorKind::UnexpectedEof => eprintln!("eof"), _ => eprintln!("{e:?}"), } }); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论