Closed3

「bincode - Rust」をGPTを使って要約した。

漆 柳汰 / うるし漆 柳汰 / うるし

入力

入力
## 【目的】  
提示する情報を要約してください。

## 【回答時のルール】
- 不明点は「分からない」と明記してください。
- 事実情報には必ず出典(URLや「情報より」など)を明記してください。 
- 事実と推測・仮説は明確に区別してください。 
- 初学者にもわかりやすいよう、なるべく箇条書きで簡潔にまとめてください。

## 【対象URL】   
https://docs.rs/bincode/latest/bincode/
漆 柳汰 / うるし漆 柳汰 / うるし

出力

以下は、Rustのバイナリシリアライズライブラリ「bincode」の公式ドキュメント(バージョン2.0.1)からの要約です。(Docs.rs)


🔑 概要

  • bincode は、Rustのオブジェクトを迅速かつコンパクトにバイナリ形式でシリアライズ・デシリアライズするためのクレートです。
  • バージョン2.0以降、serde はオプションの依存関係となり、必要に応じて有効化できます。

🧰 主な機能と使用方法

✅ 基本的なシリアライズ・デシリアライズ

  • シリアライズ:

    • encode_to_vecVec<u8> にエンコード
    • encode_into_slice:指定したスライスにエンコード
    • encode_into_writer:任意の Write 実装にエンコード
  • デシリアライズ:

    • decode_from_slice:スライスからデコード
    • decode_from_reader:任意の Read 実装からデコード
    • decode_from_std_readstd::io::Read 実装からデコード (Docs.rs, Docs.rs, Docs.rs, Docs.rs)

⚙️ 設定(config モジュール)

  • エンコーディングの設定をカスタマイズできます。

  • 主な設定項目:

    • エンディアンwith_big_endian または with_little_endian
    • 整数エンコーディングwith_variable_int_encoding または with_fixed_int_encoding
    • バイト制限with_limit(N) (Docs.rs, Docs.rs, Docs.rs)

🧩 serde 統合(オプション)

  • serde を使用する場合、serde フィーチャーを有効化する必要があります。

  • serdebincode の統合には注意点があり、以下の属性は使用しないことが推奨されています:

    • #[serde(flatten)]
    • #[serde(skip)]
    • #[serde(skip_serializing)]
    • #[serde(skip_deserializing)]
    • #[serde(skip_serializing_if = "path")]
    • #[serde(tag = "...")]
    • #[serde(untagged)]
  • これらの属性を使用すると、データの損失が発生する可能性があります。 (Docs.rs)


🧪 使用例

use bincode::{encode_to_vec, decode_from_slice, config};

#[derive(Encode, Decode, PartialEq, Debug)]
struct Entity {
    x: f32,
    y: f32,
}

#[derive(Encode, Decode, PartialEq, Debug)]
struct World(Vec<Entity>);

fn main() {
    let config = config::standard();
    let world = World(vec![
        Entity { x: 0.0, y: 4.0 },
        Entity { x: 10.0, y: 20.5 },
    ]);

    // エンコード
    let encoded: Vec<u8> = encode_to_vec(&world, config).unwrap();

    // デコード
    let (decoded, len): (World, usize) = decode_from_slice(&encoded[..], config).unwrap();

    assert_eq!(world, decoded);
    assert_eq!(len, encoded.len()); // すべてのバイトを読み取ったことを確認
}

⚠️ 注意点

  • バージョン互換性:

    • bincode バージョン1と2は、同じ設定を使用すれば互換性があります。
  • serde の使用:

    • serde を使用する場合、bincode::serde モジュールを利用する必要があります。 (Docs.rs, Docs.rs)

🔗 参考リンク


このスクラップは1ヶ月前にクローズされました