C# 以增量序列化对象?

C# 以增量序列化对象?,c#,serialization,bytearray,C#,Serialization,Bytearray,我知道如何将一个对象序列化为一个字节数组,但它将其作为一个整体进行序列化,有没有办法将其序列化为块(比如kb)?例如,我有一个对象,它将序列化为一个大字节数组,比如4mb,而不是同时序列化整个对象,我想一次序列化它1 kb的块,这样它将序列化1kb的块并传递它,然后继续下一个,直到它完全序列化。我该怎么做呢 我当前的序列化/反序列化类: using System; using System.Windows.Forms; using System.Collections.Generic; usin

我知道如何将一个对象序列化为一个字节数组,但它将其作为一个整体进行序列化,有没有办法将其序列化为块(比如kb)?例如,我有一个对象,它将序列化为一个大字节数组,比如4mb,而不是同时序列化整个对象,我想一次序列化它1 kb的块,这样它将序列化1kb的块并传递它,然后继续下一个,直到它完全序列化。我该怎么做呢

我当前的序列化/反序列化类:

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中,只是以增量传递它们,而不是以增量实际序列化。