bytes::Bytes
。
我想发送的消息是关于浮点向量(
Vec<{float}>
)的,我将其转换如下:
let flatten_array: Vec<u8> = correct_centroids
.clone()
.into_iter()
.flat_map(|x| f32::to_le_bytes(x).to_vec().into_iter())
.collect();
let data = Bytes::from(flatten_array);
我的问题是,如何重新转换我返回的
Vec<u8>
再次Vec<{float}>
。
还有其他更好的方法来序列化消息吗?
您可以使用
chunks
来分割 Vec
(或更具体地说是任何切片),转换为数组并调用 from_le_bytes
,即几乎只需执行与您所做的相反的操作:
fn u8_to_f32_vec(v: &[u8]) -> Vec<f32> {
v.chunks(4)
.flat_map(TryInto::try_into) // `flat_map` only takes `Ok` values but we only get `Ok` values to begin with
.copied()
.map(f32::from_le_bytes)
.collect()
}
唯一的问题是
chunks
只提供切片,而不提供数组引用。将来(或每晚)可以使用 array_chunks
方法来编写:
#![feature(array_chunks)]
fn u8_to_f32_vec(v: &[u8]) -> Vec<f32> {
v.array_chunks::<4>()
.copied()
.map(f32::from_le_bytes)
.collect()
}