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

获取 self 的 TypeId。 Read more

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

从拥有的值中借用。 Read more

执行转换。

执行转换。

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

执行转换。

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

执行转换。