#json #numbers #encode

encoder

用 Rust 编写的闪电般快的编码器

8 个版本

0.2.4 2024 年 2 月 5 日
0.2.3 2024 年 2 月 2 日
0.2.2 2024 年 1 月 25 日
0.1.2 2024 年 1 月 19 日

#804编码

Download history 37/week @ 2024-04-23 4/week @ 2024-04-30 23/week @ 2024-05-07 34/week @ 2024-05-14 79/week @ 2024-05-21 17/week @ 2024-05-28 52/week @ 2024-06-04 87/week @ 2024-06-11 102/week @ 2024-06-18 227/week @ 2024-06-25 182/week @ 2024-07-02 255/week @ 2024-07-09 154/week @ 2024-07-16 102/week @ 2024-07-23 145/week @ 2024-07-30 126/week @ 2024-08-06

568 每月下载次数
用于 2 crates

MIT 许可证

33KB
285

编码器

用 Rust 编写的闪电般快的编码器

Crates.io MIT licensed Documentation Build Status Build Status Build Status

快速入门

数字编码

use encoder::number::Encode;

fn main() {
    let mut buf = vec![];
    1_i32.encode(&mut buf);
    2_u32.encode(&mut buf);
    1_f32.encode(&mut buf);
    2_f64.encode(&mut buf);
    assert_eq!(String::from_utf8_lossy(&buf), r#"121.02.0"#);

    assert_eq!(1_i32.stringify(), "1");
    assert_eq!(2_u32.stringify(), "2");
    assert_eq!(1_f32.stringify(), "1.0");
    assert_eq!(2_f64.stringify(), "2.0");
}

Json 编码

use encoder::json::Encode;

fn main() {
    let mut buf = vec![];
    "Hello, 世界! 👋".encode(&mut buf);
    assert_eq!(String::from_utf8_lossy(&buf), r#""Hello, 世界! 👋""#);
    assert_eq!("Hello, 世界! 👋".stringify(), r#""Hello, 世界! 👋""#);
}

基准测试

  • MacBook Air, Apple M2 24G, Sonoma 14.2.1
模块 名称 时间
数字 i8_max [1.1773 ns 1.1780 ns 1.1791 ns]
数字 i8_min [1.1773 ns 1.1774 ns 1.1776 ns]
数字 u8_max [1.1775 ns 1.1777 ns 1.1780 ns]
数字 u8_min [1.1773 ns 1.1775 ns 1.1777 ns]
数字 i16_max [7.3593 ns 7.3655 ns 7.3741 ns]
数字 i16_min [7.6517 ns 7.6528 ns 7.6539 ns]
数字 u16_max [1.1774 ns 1.1776 ns 1.1777 ns]
数字 u16_min [1.1771 ns 1.1772 ns 1.1774 ns]
数字 i32_max [7.0644 ns 7.0683 ns 7.0738 ns]
数字 i32_min [8.5311 ns 8.5325 ns 8.5340 ns]
数字 u32_max [1.3218 ns 1.3220 ns 1.3223 ns]
数字 u32_min [1.1774 ns 1.1777 ns 1.1780 ns]
数字 i64_max [10.301 ns 10.303 ns 10.306 ns]
数字 i64_min [10.864 ns 10.871 ns 10.878 ns]
数字 u64_max [1.3884 ns 1.3898 ns 1.3913 ns]
数字 u64_min [1.1750 ns 1.1752 ns 1.1755 ns]
数字 i128_max [19.795 ns 19.802 ns 19.809 ns]
数字 i128_min [17.784 ns 17.786 ns 17.788 ns]
数字 u128_max [13.505 ns 13.511 ns 13.520 ns]
数字 u128_min [4.6991 ns 4.6997 ns 4.7006 ns]
数字 isize_max [10.277 ns 10.282 ns 10.288 ns]
数字 isize_min [10.850 ns 10.854 ns 10.857 ns]
数字 usize_max [1.3721 ns 1.3728 ns 1.3736 ns]
数字 usize_min [1.1742 ns 1.1743 ns 1.1743 ns]
数字 true [1.1747 ns 1.1751 ns 1.1757 ns]
数字 false [1.1749 ns 1.1751 ns 1.1753 ns]
数字 f32_max [8.3038 ns 8.3095 ns 8.3153 ns]
数字 f32_min [8.4419 ns 8.4457 ns 8.4494 ns]
数字 f64_max [13.167 ns 13.169 ns 13.171 ns]
数字 f64_min [13.238 ns 13.241 ns 13.244 ns]
json char [8.8353 ns 8.8492 ns 8.8689 ns]
json str [12.660 ns 12.662 ns 12.664 ns]
json string [12.656 ns 12.658 ns 12.660 ns]
json option [5.5423 ns 5.5446 ns 5.5471 ns]
json array_raw [19.427 ns 19.430 ns 19.433 ns]
json array_vec [16.483 ns 16.485 ns 16.488 ns]
json array_vec_deque [20.307 ns 20.310 ns 20.313 ns]
json set_hash [19.272 ns 19.281 ns 19.295 ns]
json set_btree [25.390 ns 25.400 ns 25.413 ns]
json set_index [16.761 ns 16.773 ns 16.789 ns]
json object_hash [54.982 ns 55.042 ns 55.124 ns]
json object_btree [61.862 ns 61.924 ns 61.975 ns]
json 对象索引 [55.700 ns 55.758 ns 55.837 ns]
  • AWS c5.2xlarge, 8C 16G, Ubuntu 22.04
模块 名称 时间
数字 i8_max [3.0645 ns 3.0648 ns 3.0650 ns]
数字 i8_min [2.7861 ns 2.7862 ns 2.7863 ns]
数字 u8_max [3.0649 ns 3.0650 ns 3.0651 ns]
数字 u8_min [2.7877 ns 2.7879 ns 2.7881 ns]
数字 i16_max [11.146 ns 11.147 ns 11.147 ns]
数字 i16_min [12.263 ns 12.264 ns 12.264 ns]
数字 u16_max [3.0648 ns 3.0650 ns 3.0653 ns]
数字 u16_min [2.7858 ns 2.7859 ns 2.7860 ns]
数字 i32_max [11.853 ns 11.860 ns 11.867 ns]
数字 i32_min [13.127 ns 13.132 ns 13.137 ns]
数字 u32_max [3.0660 ns 3.0662 ns 3.0663 ns]
数字 u32_min [2.7874 ns 2.7876 ns 2.7878 ns]
数字 i64_max [15.666 ns 15.667 ns 15.668 ns]
数字 i64_min [16.215 ns 16.217 ns 16.218 ns]
数字 u64_max [3.0650 ns 3.0651 ns 3.0652 ns]
数字 u64_min [2.7863 ns 2.7864 ns 2.7865 ns]
数字 i128_max [32.571 ns 32.573 ns 32.575 ns]
数字 i128_min [32.663 ns 32.665 ns 32.667 ns]
数字 u128_max [19.219 ns 19.220 ns 19.221 ns]
数字 u128_min [9.4300 ns 9.4523 ns 9.4748 ns]
数字 isize_max [15.665 ns 15.666 ns 15.666 ns]
数字 isize_min [16.203 ns 16.204 ns 16.205 ns]
数字 usize_max [3.0659 ns 3.0660 ns 3.0662 ns]
数字 usize_min [2.7862 ns 2.7864 ns 2.7866 ns]
数字 true [2.7860 ns 2.7861 ns 2.7862 ns]
数字 false [3.0650 ns 3.0652 ns 3.0654 ns]
数字 f32_max [18.247 ns 18.264 ns 18.281 ns]
数字 f32_min [18.287 ns 18.306 ns 18.324 ns]
数字 f64_max [25.632 ns 25.641 ns 25.650 ns]
数字 f64_min [25.569 ns 25.576 ns 25.584 ns]
json char [16.928 ns 16.959 ns 16.991 ns]
json str [17.812 ns 17.825 ns 17.838 ns]
json string [18.040 ns 18.053 ns 18.066 ns]
json option [9.5428 ns 9.5551 ns 9.5672 ns]
json array_raw [42.524 ns 42.558 ns 42.592 ns]
json array_vec [38.338 ns 38.343 ns 38.349 ns]
json array_vec_deque [37.892 ns 37.894 ns 37.896 ns]
json set_hash [36.211 ns 36.213 ns 36.215 ns]
json set_btree [45.391 ns 45.416 ns 45.442 ns]
json set_index [34.817 ns 34.818 ns 34.819 ns]
json object_hash [84.059 ns 84.226 ns 84.389 ns]
json object_btree [85.961 ns 86.056 ns 86.156 ns]
json 对象索引 [72.589 ns 72.626 ns 72.660 ns]

许可证

本软件根据MIT许可证发布。

在此使用的外部库仍为其各自作者的财产。修改后的库代码位于'lib'目录中。我们对这些作者表示衷心的感谢。

依赖项

~7MB
~125K SLoC