我正在摆弄板条箱雪橇,并尝试使用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) 我有一个像这样的枚举:
#[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)
然而,这会引发以下消息:
Run Code Online (Sandbox Code Playgroud)#[derive(Debug, Deserialize, Serialize)] enum E { A(i32), #[serde(skip)] B(bool), C(char), D(Vec<i32>), }
我注意到,如果满足以下条件之一,则一切正常:
#[serde(skip)]属性我还了解 bincode 以某种方式忽略#[serde(skip)]并尝试反序列encoded化为E::D(Vec<i32>). 如果我更改Vec<i32>为char它会起作用,但decoded会E::D('A')(而不是E::C('A'))。
我错过了什么还是 bincode 箱中的错误?
我有一个 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) 我使用 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)