是否可以使用Protobuf.net序列化二进制编码器创建的内存流元组?如果我尝试这样做,Protobuf说它无法序列化流。
我所追求的是序列化一组锯齿状数组。我不想将它们转换为1D数组,因为我认为没有必要。所以我认为我会自己将锯齿状数组序列化为内存流,但我希望Protobuf.net为我序列化元组。我需要尽可能快地进行整体序列化/反序列化。
编辑:
我的总体目标是尽可能快地通过WCF发送以下锯齿状数组元组。总时间from jagged array to jagged array
计算在内。
// F# interactive code
#time "on"
#r @"d:\Protobuf\protobuf-net.dll"
let getJaggedArray () =
let size = 100
let rnd = System.Random 1
Array.init size (fun i ->
Array.init size (fun j ->
Array.init size (fun k ->
rnd.NextDouble() )))
let wcfData = (getJaggedArray (), getJaggedArray ()), getJaggedArray ()
let file = new System.IO.FileStream ("test.bin", System.IO.FileMode.Create)
ProtoBuf.Serializer.Serialize (file, wcfData)
file.Close()
// === Future use ===
//[<ServiceContract>]
//type IWCF =
//
// [<OperationContract>]
// [<ProtoBehavior>]
// abstract Send: wcfData -> unit
答案 0 :(得分:2)
Protobuf-net当前没有任何特定的流处理(虽然它会处理byte[]
),虽然我猜它可以只是消耗Stream
(序列化)并重现MemoryStream
(反序列化)。如果你不想改变你的模型,应该可以为Stream
注册一个“代理”,它只在几行代码中完成(请告诉我是否感兴趣)。 / p>
它自动支持大多数常见的“元组”模式,但锯齿状数据又是一个问题 - 尽管如果我们确实需要,这个可以处理(更常见的是,有一个外部列表)他们自己拥有内部列表的对象是一种实用的解决方法,以“锯齿状”,并且当前有效。
如果您可以发布更完整(理想情况下可运行)的示例,我可能会提供更多指导。