#解码器 #utf-8 #ascii #ascii-byte #byte-stream

chisel-decoders

Chisel UTF-8 和 ASCII 字节流解码器实现

4个稳定版本

1.1.0 2023年10月30日
1.0.8 2023年10月11日
1.0.7 2023年9月26日
1.0.6 2023年4月25日
0.1.19 2023年3月31日

#534编码

Download history 23/week @ 2024-04-02 2/week @ 2024-04-09 1/week @ 2024-05-28 4/week @ 2024-06-04 2/week @ 2024-06-11 1/week @ 2024-06-18 2/week @ 2024-06-25 60/week @ 2024-07-02

63 每月下载量
4 个包中(3 个直接) 使用

MIT/Apache

3MB
514

chisel-decoders

Workflow Status

crates.io

crates.io

概述

此包包含了一些非常简单、精简的解码器实现,它将从给定的 Read 实现中消费 u8 字节,并使用 UTF-8 或 ASCII 解码成 Rust 内部 char 类型。

解码器实现相当快速和宽松:底层使用一些位操作以及 unsafe transmute 函数来完成转换。

转换过程中不使用字符串分配.

用法

用法很简单,只要你有实现 Read 的东西来获取一些字节即可

从切片创建

只需将您的数组包裹在一个 mut 读取器中,然后将其连接到一个新的 Utf8Decoder 实例

    # use std::io::BufReader;
    # use chisel_decoders::utf8::Utf8Decoder;

    let buffer: &[u8] = &[0x10, 0x12, 0x23, 0x12];
    let mut reader = BufReader::new(buffer);
    let _decoder = Utf8Decoder::new(&mut reader);

如果您相当确信您只处理 ASCII,那么只需选择 AsciiDecoder

    # use std::io::BufReader;
    # use chisel_decoders::ascii::AsciiDecoder;

    let buffer: &[u8] = &[0x10, 0x12, 0x23, 0x12];
    let mut reader = BufReader::new(buffer);
    let _decoder = AsciiDecoder::new(&mut reader);

从文件创建

只需打开您的文件,将其包裹在一个 Read 实例中,然后将其连接到一个新的 Utf8Decoder 实例

    # use std::fs::File;
    # use std::io::BufReader;
    # use std::path::PathBuf;
    # use chisel_decoders::utf8::Utf8Decoder;

    let path = PathBuf::from("./Cargo.toml");
    let f = File::open(path);
    let mut reader = BufReader::new(f.unwrap());
    let _decoder = Utf8Decoder::new(&mut reader);

消费解码后的 chars

一旦创建了特定解码器的实例,您只需迭代 chars 来提取解码后的字符(解码器实现了 Iterator<Item=char>

    # use std::fs::File;
    # use std::io::BufReader;
    # use std::path::PathBuf;
    # use chisel_decoders::utf8::Utf8Decoder;

    let path = PathBuf::from("./Cargo.toml");
    let f = File::open(path);
    let mut reader = BufReader::new(f.unwrap());
    let decoder = Utf8Decoder::new(&mut reader);
    for c in decoder {
       println!("char: {}", c)
    }

构建和测试

就像您预期的那样,只需运行 cargo build 来构建包。

建议和请求

如果您有任何建议、请求或只是关于此包的评论,请只需添加一个问题,我会在有时间的时候看看。如果您想在自己的工作中使用/修改此代码,请随意fork此仓库。

无运行时依赖