C# 以增量序列化对象?
我知道如何将一个对象序列化为一个字节数组,但它将其作为一个整体进行序列化,有没有办法将其序列化为块(比如kb)?例如,我有一个对象,它将序列化为一个大字节数组,比如4mb,而不是同时序列化整个对象,我想一次序列化它1 kb的块,这样它将序列化1kb的块并传递它,然后继续下一个,直到它完全序列化。我该怎么做呢 我当前的序列化/反序列化类:C# 以增量序列化对象?,c#,serialization,bytearray,C#,Serialization,Bytearray,我知道如何将一个对象序列化为一个字节数组,但它将其作为一个整体进行序列化,有没有办法将其序列化为块(比如kb)?例如,我有一个对象,它将序列化为一个大字节数组,比如4mb,而不是同时序列化整个对象,我想一次序列化它1 kb的块,这样它将序列化1kb的块并传递它,然后继续下一个,直到它完全序列化。我该怎么做呢 我当前的序列化/反序列化类: using System; using System.Windows.Forms; using System.Collections.Generic; usin
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace TCP_Handler
{
public class SerialMediator
{
/// <summary>
/// Serializes a packet into a byte array
/// </summary>
/// <param name="pkt"></param>
/// <returns></returns>
public static Byte[] Serialize(Packet pkt)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, (Object)pkt);
return ms.ToArray();
}
/// <summary>
/// Deserializes a packet from a byte array
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
public static Packet Deserialize(Byte[] arr)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
ms.Write(arr, 0, arr.Length);
ms.Seek(0, SeekOrigin.Begin);
try
{
return (Packet)bf.Deserialize(ms);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw new Exception("Byte array did not represent a packet");
}
}
}
}
使用系统;
使用System.Windows.Forms;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Runtime.Serialization.Formatters.Binary;
使用System.IO;
命名空间TCP_处理程序
{
公共类串行中介器
{
///
///将数据包序列化为字节数组
///
///
///
公共静态字节[]序列化(数据包pkt)
{
BinaryFormatter bf=新的BinaryFormatter();
MemoryStream ms=新的MemoryStream();
序列化(ms,(Object)pkt);
返回ToArray女士();
}
///
///从字节数组反序列化数据包
///
///
///
公共静态数据包反序列化(字节[]arr)
{
BinaryFormatter bf=新的BinaryFormatter();
MemoryStream ms=新的MemoryStream();
ms.Write(arr,0,arr.Length);
Seek女士(0,SeekOrigin.Begin);
尝试
{
返回(数据包)bf.反序列化(毫秒);
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
抛出新异常(“字节数组不代表数据包”);
}
}
}
}
您的问题在于使用字节[]
。使用一个真正的流(不是内存流),它在通道中被分割,这是理所当然的。你是什么意思?在序列化或反序列化函数中?如果您的意思是在serialize函数中将结果写入流,那么它仍然将所有字节添加到ram中,只是以增量传递它们,而不是以增量实际序列化。