场景:我即将实现一个缓存功能,我想缓存从 Web 服务接收到的序列化对象树。序列化对象以字节 [] 的形式出现,我基本上只想创建一个我想要存储的第二个字节 [],以防我想恢复原始数据而不再次查询 Web 服务。
问题:如果我使用简单的循环将源字节 [] 复制到目标字节 [] 中,例如:
for (int i = 0; i < source.Length - 1; i++)
target[i] = source[i];
那么 BinaryFormatter 无法反序列化该新字节 []。异常说:
二进制流“0”不包含有效的 BinaryHeader。可能的原因是无效的流或序列化和反序列化之间的对象版本更改。
但是,如果我使用 Buffer.BlockCopy() 或 Array.CopyTo() 复制数组,则 BinaryFormatter 反序列化复制的字节 [] 没有问题。
所以我的问题是,有谁知道为什么以及如何在循环中复制该数组与使用这些函数不同?在第一种方法中,那个 byte[] 到底缺少什么?