C#网络编程学习(6)---序列化和反序列化
1、什么是序列化和反序列化
当客户端和服务器进行远程连接时,互相可以发送各种类型的数据。但都要先把这些对象转换为字节序列,才能在网络上进行传输。
序列化:就是发送方 把对象转换为字节序列的过程。
反序列化:就是接收方 把字节序列转换为对象的过程。
2、BinaryFormatter
BinaryFormatter以二进制格式序列化和反序列化对象。
属性:
Serializable:表示可以被序列化
NonSerializable:屏蔽序列化
方法:
binaryFormatter.Serialize(Stream stream,Object obj):把对象序列化到指定的流
binaryFormatter.Deserialize(Stream stream):把指定流反序列化成对象
序列化
/// <summary>
/// 序列化,Object对象转换为字节数组
/// </summary>
private static byte[] EncodeObj(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj); //把obj序列化到ms流中
byte[] data = new byte[ms.Length];
Buffer.BlockCopy(ms.GetBuffer(), 0, data, 0, (int)ms.Length);
return data;
}
}
反序列化
/// <summary>
/// 反序列化
/// </summary>
private static object DecodeObj(byte[] data)
{
using (MemoryStream ms = new MemoryStream(data))
{
BinaryFormatter bf = new BinaryFormatter();
return bf.Deserialize(ms);
}
}
C#网络编程学习(6)---序列化和反序列化的更多相关文章
- [转]Windows网络编程学习-面向连接的编程方式
直接附上原文链接:windows 网络编程学习-面向连接的编程方式
- C,C++网络编程学习简明指南
C,C++网络编程学习简明指南 1. 扎实的C,C++基础知识 参考资料<C程序设计>,<C++ primer>. 2. TCP/IP协议 经典书是:W.Richard Ste ...
- 转 网络编程学习笔记一:Socket编程
题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...
- Windows平台VC++ 6.0 下的网络编程学习 - 简单的测试winsock.h头文件
最近学习数据结构和算法学得有点累了(貌似也没那么累...)...找了本网络编程翻了翻当做打一个小基础吧,打算一边继续学习数据结构一边也看看网络编程相关的... 简单的第一次尝试,就大致梳理一下看书+自 ...
- Linux C++ 网络编程学习系列(1)——端口复用实现
Linux C++ 网络编程学习系列(1)--端口复用实现 源码地址:https://github.com/whuwzp/linuxc/tree/master/portreuse 源码说明: serv ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
- Qt 多线程和网络编程学习
一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run( ...
- python网络编程学习《一》
最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以 ...
- 转:MFC网络编程学习
要学习好网路编程,主要看以下几个方面: 1.掌握概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等. 2.在实际Windows网络通信软件开发中,异步非阻 ...
随机推荐
- Selenium-多窗口处理
弹出新的窗口,该如何处理 1.获取当前窗口句柄 2.元素的操作,打开新的窗口 3.获取所有窗口句柄 4.for循环遍历所有窗口,定位到需要操作的窗口上 和你当前句柄不一样的就说明是新的,通过打印tit ...
- Java钉钉开发_异常_01_error code:50002, error message:请求的员工userid不在授权范围内
一.异常原因: 请求的员工不在 应用的可见范围内. 如下图,应用的可见范围只设置为了部分员工.所以导致此异常 二.异常解决 将员工添加进可见范围即可
- 用cookie登录慕课网络教学中心刷评论
声明:本文仅供学习参考 我们学校和的网络教学平台是在慕课网上的,需要登录到慕课网的教学平台以后,拿到cookie 注意:没次提交后需要休眠,否则刷评论过快会被系统发现 如果请求太快,很容易被系统发现( ...
- 关于_T()说明
#define _T(X) L##X _T()是MFC里的宏.VS支持两种编码方式ASCII和Unicode,前者是用单字节编码,只能表示0~255个字符.为了表示各个国家的字符,采用了UNICO ...
- PostgreSQL聚合函数的filter子句
一张表存储了学生id,科目,分数三个字段,求每个学生60分以下与参加的总科目占比.(今天电脑不好用,图片总是这样) 其实一个count(*) filter 就可以查出来,但是没用过PG的一个人竟然说 ...
- I.MX6 Android 永不休眠
/************************************************************************* * I.MX6 Android 永不休眠 * 说明 ...
- git branch detached from jb4.2.2_1.0.0-ga
/*************************************************************************** * git branch detached f ...
- QT(4)信号与槽
mainWidget.h #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QPushBu ...
- MongoDB3.2.8创建初始用户
启动MongoDB前需要关闭配置文件中的auth选项,否则不能创建用户 首先创建用户管理用户 use admin db.createUser({user:'admin',pwd:'123456', r ...
- virtual judge(专题一 简单搜索 E)
Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...