我正在创建一个项目,我正在构建一个几乎类似于对象图的序列化的字节数组。每个类都负责写出它自己的数据,所以我正在考虑使用BinaryWriter并将该实例传递给我的子对象,并让它们自己序列化成此对象,而不是创建临时缓冲区(字节数组)并将它们合并。随机访问和BinaryWriter?
但是我需要在每个子数据前加上一个字节来指定下一个块的大小,但是直到孩子写完所有数据才知道,到那时,写者被定位在孩子数据。我当然可以创建一个临时缓冲区,然后将一个临时BinaryWriter传递给子节点,然后将数据写入“主”BinaryWriter,但这感觉像是一个骇人的解决方案。
是否有任何其他解决办法?篡改BinaryWriter的位置可能不是个好主意吗?我想,以避免创建临时缓冲区/作家如果可能的话,只是让每个孩子写信给我的“主”的作家/缓冲
下面的解决方案可能会奏效,但一点点的hackish。有没有更好的解决方案? (我没有测试过所以有可能不完全字节对齐)
public abstract class BaseObject
{
public abstract void Serialize(BinaryWriter writer);
}
public class Program()
{
public static void Main()
{
List<BaseObject> myChildren = new List<BaseObject>();
// ... Initialize children here..
MemoryStream memoryStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memoryStream);
foreach (BaseObject child in myChildren) {
writer.Write((byte)0); // Dummy placeholder. Length is a byte
long sizePosition = writer.BaseStream.Position;
child.Serialize(writer);
long currentPosition = writer.BaseStream.Position;
writer.Seek(sizePosition, SeekOrigin.Begin);
writer.Write((byte)currentPosition-sizePosition);
writer.Seek(currentPosition , SeekOrigin.Begin);
}
}
}
这是因为我没有这个格式。我真正想做的是序列化DHCP选项... – Per 2010-01-23 19:37:04