Сериализация кортежа потоков памяти (зубчатых массивов) с использованием Protobuf.net - PullRequest
1 голос
/ 22 октября 2011

Можно ли сериализовать кортеж потоков памяти, созданных бинарным писателем с использованием Protobuf.net?Если я попробую это сделать, Protobuf скажет, что не может сериализовать поток.

Я хочу сериализовать кортеж из зубчатых массивов.Я не хочу конвертировать их в одномерные массивы, потому что считаю, что в этом нет необходимости.Поэтому я подумал, что сам сериализирую зубчатые массивы в поток памяти, но я хочу, чтобы 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

1 Ответ

2 голосов
/ 22 октября 2011

Protobuf-net в настоящее время не имеет какой-либо специальной обработки потоков (хотя он будет обрабатывать byte[]), хотя я предполагаю, что может просто потреблять Stream (сериализовать) и воспроизводить MemoryStream (десериализация). Если вы не хотите менять свою модель, должна быть возможность зарегистрировать «суррогат» для Stream, который делает это только в нескольких строках кода (дайте мне знать, если это представляет интерес).

Он имеет автоматическую поддержку большинства распространенных шаблонов «кортеж», но зазубренные данные снова представляют собой проблему - хотя, опять же, этот может быть обработан, если нам действительно нужно (чаще всего, имея внешний список объекты, которые сами по себе имеют во внутреннем списке - это прагматический обходной путь к «зубчатым», и работает в настоящее время).

Если вы можете опубликовать более полный (в идеале пригодный для выполнения) пример, я, возможно, смогу предложить дополнительные рекомендации.

...