byte[]到强类型数组
本文关键字:强类型 数组 byte | 更新日期: 2023-09-27 18:26:30
我在将大字节[]数组转换为强类型数组时遇到一些问题。
- 我有一个数组,它被连接成一个大字节[]数组并存储在一个表中
- 然后我想读取这个byte[]数组,但将其转换为强类型数组
由于我已经将整个数组存储为byte[]数组,我可以不读取该字节数组并将其转换为强类型版本吗目前它返回null
这有可能一蹴而就吗?
提前谢谢,奥南。
<code>
#region Save
public void Save<T>(T[] Array) where T : new()
{
List<byte[]> _ByteCollection = new List<byte[]>();
byte[] _Bytes = null;
int _Length = 0;
int _Offset = 0;
foreach (T _Item in Array)
{
_ByteCollection.Add(Serialise(_Item));
}
foreach (byte[] _Byte in _ByteCollection)
{
_Length += _Byte.Length;
}
_Bytes = new byte[_Length];
foreach (byte[] b in _ByteCollection)
{
System.Buffer.BlockCopy(b, 0, _Bytes, _Offset, b.Length);
_Offset += b.Length;
}
Customer[] c = BinaryDeserialize<Customer[]>(_Bytes);
}
#endregion
#region BinaryDeserialize
public static T BinaryDeserialize<T>(byte[] RawData)
{
T _DeserializedContent = default(T);
BinaryFormatter _Formatter = new BinaryFormatter();
try
{
using (MemoryStream _Stream = new MemoryStream())
{
_Stream.Write(RawData, 0, RawData.Length);
_Stream.Seek(0, SeekOrigin.Begin);
_DeserializedContent = (T)_Formatter.Deserialize(_Stream);
}
}
catch (Exception ex)
{
_DeserializedContent = default(T);
}
return _DeserializedContent;
}
#endregion
</code>
我认为问题是将每个项序列化到一个列表中,然后连接字节。当这被取消序列化时,它看起来就像是一个客户的数据加上最后的一些意外数据(其他客户)。
我不知道你的序列化方法是如何工作的,但你可能只需要更改代码:
foreach (T _Item in Array)
{
_ByteCollection.Add(Serialise(_Item));
}
收件人:
_ByteCollection.Add(Serialise(Array));
这应该行得通,然后你可能会把它简化一点。
很可能是线
_DeserializedContent = (T)_Formatter.Deserialize(_Stream);
引发异常。在catch块中,您只需吞下并忽略该异常。