C# 对象和byte数组的互相转化(序列化)
通常Socket数据传送过程中,我们把对象转化为byte数组,接手时再将数组转化为对应的对象,这一过程可以通过序列化完成
前提是传输的对象必须标记为可以序列化的,下面举个例子:
Package为 我们要传送接收的对象消息
[Serializable]
public class Package
{
/// <summary>
/// 包类型
/// </summary>
public PackageType PackType { get; set; }
/// <summary>
/// 源IP及端口
/// </summary>
public string Src_IP_Port { get; set; }
/// <summary>
/// 目标IP及端口
/// </summary>
public string Desc_IP_Port { get; set; }
}
发送数据时,我们通过BinaryFormatter对象将Package对象序列化进MemoryStream内存流中,然后得到Byte数组进行传递。
private void Send(Package pack, Socket s)
{
BinaryFormatter formatter = new BinaryFormatter();
byte[] retbuff = new byte[1];
using (MemoryStream mStream = new MemoryStream())
{
formatter.Serialize(mStream, pack);
mStream.Flush();
s.Send(mStream.GetBuffer(), (int)mStream.Length, SocketFlags.None);
s.Receive(retbuff, 1, SocketFlags.OutOfBand);
if (retbuff[0] == 0)
{
Send(pack, s);
}
}
}
接收数据时将byte数组写入内存流,通过BInaryFormatter的反序列化将内存流中的数据转化为对象
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream mStream = new MemoryStream())
{
mStream.Write(buffer, 0, ret);
mStream.Flush();
mStream.Seek(0, SeekOrigin.Begin);
pack = (Package)formatter.Deserialize(mStream);
}
————————————————
版权声明:本文为CSDN博主「IT界的卡卡西」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cjb_king/article/details/89399213
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)