场景:我即将实现一个缓存功能,我想在其中缓存我从Web服务收到的序列化对象树.序列化对象以byte []形式出现,我基本上只想创建一个我想要存储的第二个字节[],以防我想要恢复原始数据而无需再次查询Web服务.
问题:如果我使用一个简单的循环将源字节[]复制到目标字节[]中,例如:
for (int i = 0; i < source.Length - 1; i++)
target[i] = source[i];
Run Code Online (Sandbox Code Playgroud)
那么BinaryFormatter无法反序列化新的byte [].例外说:
二进制流'0'不包含有效的BinaryHeader.可能的原因是序列化和反序列化之间的无效流或对象版本更改.
但是如果我使用Buffer.BlockCopy()或Array.CopyTo()复制数组,则BinaryFormatter对复制的byte []进行反序列化没有问题.
所以我的问题是,是否有人知道为什么以及如何在循环中复制该数组与使用这些函数不同?在第一种方法中,该字节[]究竟缺少了什么?
看这个:
for (int i = 0; i < source.Length - 1; i++)
Run Code Online (Sandbox Code Playgroud)
那是除了最后一个字节之外的所有复制.你要:
for (int i = 0; i < source.Length; i++)
Run Code Online (Sandbox Code Playgroud)
Clone()尽管打电话会更简单:
byte[] target = (byte[]) source.Clone();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |