Protokol arabellekleri için tel formatı bu önemsiz olmaz; Ben bunu yapmak için bir şey farkında değilim, ancak bir seçenek kendi uzunluk üstbilgisi ve gerektiği gibi ekstra veri ile ped ile bir arabellek içine serileştirmek olacaktır.
Bu, varsayılan olarak eklenmediği için bir uzunluk öneki eklemeniz gerekir, aksi takdirde arabellek sonunda çöp okuyor olur. Takip eden 0'lar bile yasal olmayacaktı (bir alan numarası arıyor olacaktı).
Ben C++ veya Jon'un C# sürümü yorum yapamam, ama benim C# sürümü (protobuf-net), siz (denenmemiş) böyle bir şey yapmak mümkün olmalıdır:
using(var ms = new MemoryStream(fixedLength)) {
ms.SetLength(fixedLength);
Serializer.SerializeWithLengthPrefix(ms, obj);
if(ms.Length > fixedLength) { /* boom */ }
byte[] arr = ms.ToArray(); // use this
}
Bu DeserializeWithLengthPrefix
kullanarak da iyi seri hale getirilmelidir.
Soruları (yorumları); SerializeWithLengthPrefix
, protobuf-net özel bir yöntemdir; Orada olabilir C++ sürümünde bir şey olabilir, ama oldukça basit. En kolay yolu karalama bu uygulamaktır:
- biz
- 4 bayt atlamak (veya 00- yazma ne kadar gerçek veri belirtmek için bir sabit uzunluğa (4 bayt) başlığı bırakacak varsayalım 00-00-00)
- şimdi sadece
- tampon başlangıcında geri bu değeri yazma yazdım kaç bayt
- bulmak tampon geri kalanına serialize
Açıkçası ters 0
:
- 4 bayt okuma ve O protobuf- bir küçük biraz daha karmaşıktır kadar veri
olarak bir int
serisini olarak yorumlanması net, birkaç seçenek daha sunar (int'nin nasıl kodlanması gerektiğine ve tümünün% 100 değerde bir protobuf akışı olarak kabul edilip edilemeyeceği için özellikle şüpheli Sabit genişlikli kodlama ve "alan 0" kullanması için SerializeWithLengthPrefix
sorsaydım bu davranışı daha yeni tarif ettim.
Çok teşekkürler Marc, her zaman yararlı. SerializeWithLengthPrefix'in aslında ne yaptığını daha ayrıntılı olarak açıklayabilir misiniz? Tekrar teşekkürler! – Roey
Bir şey daha, ben C++ sürümü Protokolü Buffers .... ile deserializing var DeserializeWithLengthPrefix C++ sürümünde bazı biçimde var mı? – Roey
@Roey - Bu bilgiyi şu dilde düzenleyeceğim ... –