Struct std::io::LineWriter1.0.0[][src]

pub struct LineWriter<W: Write> { /* fields omitted */ }
Expand description

包装一个 writer 并缓冲输出到它的内容,每当检测到换行符 (0x0a,‘\n’`) 时刷新一次。

BufWriter 结构体包装 writer 并缓冲其输出。 但是,仅当它离开作用域或内部缓冲区已满时,才进行此批量写入。 有时,您宁愿在完成时写每一行,而不是一次写整个缓冲区。 输入 LineWriter。 它确实做到了。

BufWriter 一样,当 LineWriter 离开作用域或其内部缓冲区已满时,也会刷新 LineWriter 的缓冲区。

如果丢弃 LineWriter 时缓冲区中仍然有部分行,它将刷新这些内容。

Examples

我们可以使用 LineWriter 一次写入一行,从而大大减少了实际写入文件的次数。

use std::fs::{self, File};
use std::io::prelude::*;
use std::io::LineWriter;

fn main() -> std::io::Result<()> {
    let road_not_taken = b"I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I -
I took the one less traveled by,
And that has made all the difference.";

    let file = File::create("poem.txt")?;
    let mut file = LineWriter::new(file);

    file.write_all(b"I shall be telling this with a sigh")?;

    // 在遇到换行符 (或内部缓冲区已满) 之前,不写入任何字节。
    assert_eq!(fs::read_to_string("poem.txt")?, "");
    file.write_all(b"\n")?;
    assert_eq!(
        fs::read_to_string("poem.txt")?,
        "I shall be telling this with a sigh\n",
    );

    // 写剩下的诗。
    file.write_all(b"Somewhere ages and ages hence:
Two roads diverged in a wood, and I -
I took the one less traveled by,
And that has made all the difference.")?;

    // 这首诗的最后一行不是以换行符结束的,所以我们必须刷新或丢弃 `LineWriter` 来完成写作。
    file.flush()?;

    // 确认整首诗是写好的。
    assert_eq!(fs::read("poem.txt")?, &road_not_taken[..]);
    Ok(())
}
Run

Implementations

创建一个新的 LineWriter

Examples

use std::fs::File;
use std::io::LineWriter;

fn main() -> std::io::Result<()> {
    let file = File::create("poem.txt")?;
    let file = LineWriter::new(file);
    Ok(())
}
Run

为内部缓冲区创建一个具有指定容量的新 LineWriter

Examples

use std::fs::File;
use std::io::LineWriter;

fn main() -> std::io::Result<()> {
    let file = File::create("poem.txt")?;
    let file = LineWriter::with_capacity(100, file);
    Ok(())
}
Run

获取对基础 writer 的引用。

Examples

use std::fs::File;
use std::io::LineWriter;

fn main() -> std::io::Result<()> {
    let file = File::create("poem.txt")?;
    let file = LineWriter::new(file);

    let reference = file.get_ref();
    Ok(())
}
Run

获取基础 writer 的可变引用。

在返回的变量引用上调用方法时必须小心,因为额外的写操作可能会破坏输出流。

Examples

use std::fs::File;
use std::io::LineWriter;

fn main() -> std::io::Result<()> {
    let file = File::create("poem.txt")?;
    let mut file = LineWriter::new(file);

    // 我们可以像文件一样使用引用
    let reference = file.get_mut();
    Ok(())
}
Run

解包此 LineWriter,返回基础 writer。

返回 writer 之前,将内部缓冲区写出。

Errors

如果刷新缓冲区时发生错误,将返回 Err

Examples

use std::fs::File;
use std::io::LineWriter;

fn main() -> std::io::Result<()> {
    let file = File::create("poem.txt")?;

    let writer: LineWriter<File> = LineWriter::new(file);

    let file: File = writer.into_inner()?;
    Ok(())
}
Run

Trait Implementations

使用给定的格式化程序格式化该值。 Read more

在此 writer 中写入一个缓冲区,返回写入的字节数。 Read more

刷新此输出流,确保所有中间缓冲的内容均到达其目的地。 Read more

类似于 write,不同之处在于它是从缓冲区片段中写入数据的。 Read more

🔬 This is a nightly-only experimental API. (can_vector #69941)

确定此 Writer 是否具有有效的 write_vectored 实现。 Read more

尝试将整个缓冲区写入此 writer。 Read more

🔬 This is a nightly-only experimental API. (write_all_vectored #70436)

尝试将多个缓冲区写入此 writer。 Read more

将格式化的字符串写入此 writer,返回遇到的任何错误。 Read more

为此 Write 实例创建 “by reference” 适配器。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。