标签: bincode

使用Sled,如何序列化和反序列化?

我正在摆弄板条箱雪橇,并尝试使用bincode进行简单的序列化和反序列化练习,只是为了掌握使用情况。

虽然我可以让插入工作,但尝试获得一系列结果似乎更困难。在这里,我尝试输入两条记录:键为 42,值为“Alice”,键为 69,值为“Bob”,然后检索并打印它们。我很难协调向量的反序列化出来的:

use crate::db::Database;
use sled::Db;
use bincode;


pub struct SledDatabase {
    db: Db,
}

impl Database for SledDatabase {
    fn create(&self) {
        // Not handling errors; just an example.
        let key: i64 = 42;
        println!("ser {:?}", bincode::serialize(&key).unwrap());
        self.db.insert(bincode::serialize(&key).unwrap(), bincode::serialize("Alice").unwrap());
        let key2: i64 = 69;
        self.db.insert(bincode::serialize(&key2).unwrap(), bincode::serialize("Bob").unwrap());
    }

    fn query(&self, value : i64) {
        let range = value.to_ne_bytes();
        let mut iter = self.db.range(range..);
        while let Some(item) = iter.next() {
            let (k, v) = item.unwrap();
            println!("res …
Run Code Online (Sandbox Code Playgroud)

rust bincode

6
推荐指数
1
解决办法
2210
查看次数

serde 跳过属性实际上跳过枚举变体吗?

我有一个像这样的枚举:

#[derive(Debug, Deserialize, Serialize)]
enum E {
    A(i32),

    #[serde(skip)]
    B(bool),

    C(char),
    D(Vec<i32>),
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用bincode crate执行以下操作:

fn main() {
    let data = E::C('A');
    let encoded = bincode::serialize(&data).unwrap();
    let decoded = bincode::deserialize::<E>(&encoded).unwrap();
    println!("{:?}", decoded);
}
Run Code Online (Sandbox Code Playgroud)

然而,这会引发以下消息:

#[derive(Debug, Deserialize, Serialize)]
enum E {
    A(i32),

    #[serde(skip)]
    B(bool),

    C(char),
    D(Vec<i32>),
}
Run Code Online (Sandbox Code Playgroud)

我注意到,如果满足以下条件之一,则一切正常:

  1. 我删除#[serde(skip)]属性
  2. 我从变体中删除元组

我还了解 bincode 以某种方式忽略#[serde(skip)]并尝试反序列encoded化为E::D(Vec<i32>). 如果我更改Vec<i32>char它会起作用,但decodedE::D('A')(而不是E::C('A'))。

我错过了什么还是 bincode 箱中的错误?

rust serde bincode

3
推荐指数
1
解决办法
993
查看次数

如何将 bincode 序列化数据反序列化为 serde_json::Value 之类的数据?

我有一个 IPC 实现,其中进程使用bincode序列化结构

在另一端,我正在接收它,可以说这个进程不知道它正在接收的结构,在这里,我想做类似的事情

let parsed: Result<serde_json::Value, serde_json::Error> = serde_json::from_str(json_str);
Run Code Online (Sandbox Code Playgroud)

但是用bincode,有可能吗?

我尝试做

let deser = bincode::deserialize::<serde_json::Value>(msg.bytes()))?;
Run Code Online (Sandbox Code Playgroud)

但它会抛出错误

Error: Bincode does not support the serde::Deserializer::deserialize_any method
Run Code Online (Sandbox Code Playgroud)

json rust serde bincode

2
推荐指数
1
解决办法
229
查看次数

结构体的保存/加载工作或失败取决于成员向量长度

我使用 serde 和 bincode 使用自定义加载/保存方法定义了以下结构:

use std::{
    fs::File,
    io::{Read, Seek, SeekFrom, Write},
};

use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Histogram {
    pub bars: Vec<f64>,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Histograms {
    pub num_bars: usize,
    pub num_histograms: usize,
    pub vec: Vec<Histogram>,
}

fn main() {
    println!("Hello, world!");
}

impl Histogram {
    pub fn new(num_bars: usize) -> Histogram {
        Histogram {
            bars: vec![0.0; num_bars],
        }
    }
}

impl Histograms {
    pub fn new(num_histograms: usize, num_bars: usize) -> …
Run Code Online (Sandbox Code Playgroud)

rust serde bincode

0
推荐指数
1
解决办法
115
查看次数

标签 统计

bincode ×4

rust ×4

serde ×3

json ×1