VB.net序列化和反序列化的使用方法和实用场景

引言

相信很多初学编程的人都会提出过这个疑问:“既然我的变量可以存在内存之中,那么是否也可以存在硬盘之中呢”

其实我想回答的是,完全可以而且方法不止一种,而今天讲的是序列化最经典的——二进制序列化

由于序列化的部分已经被新的.net弃用了,但是你只要明确一点,弃用不代表不可以用,以下是教学步骤

1、编写类型,或者是结构或者是一个变量

在存储单个.net变量时,一般都是被.NET程序员标记为可序列化的,然而自己写的类的变量则需要在类的头上加上这么一句话

<Serializable>

否则你将会看到这种情况

2、实操一下(序列化)

Imports System.IO
Imports System.Runtime.Serialization.Formatters.BinaryModule Module1Sub Main()DoDim a As String = "qwert"Dim b As New Class1Select Case Console.ReadLine()Case 1Dim fs = New FileStream("J:\桌面文件\a.bin", FileMode.Create)Dim bf = New BinaryFormatterbf.Serialize(fs, a)fs.Close()Case 2Dim fs = New FileStream("J:\桌面文件\b.bin", FileMode.Create)Dim bf = New BinaryFormatterbf.Serialize(fs, b)fs.Close()End SelectLoopEnd SubEnd Module
<Serializable>
Class Class1Dim a As String = "asd"Dim b As String = "dfg"
End Class

但是,请你注意,如果你是WinForm的开发者你将会面临一个新的问题:

翻译过来就是已经被弃用了,需要加一个标签来阻止报错 #Disable Warning SYSLIB0011

即(示例代码,被标记后的代码都会隐藏此报错代码的错误)

#Disable Warning SYSLIB0011Public Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.ClickDim fs = New FileStream(Application.StartupPath & "\Layer.bin", FileMode.Create)Dim bf = New BinaryFormatterbf.Serialize(fs, Layers)fs.Close()End SubPublic Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.ClickDim fs = New FileStream(Application.StartupPath & "\Layer.bin", FileMode.Open)Dim bf = New BinaryFormatterDim l = bf.Deserialize(fs)Layers = lreLoad()fs.Close()End Sub

很好,此时你的变量已经被存在桌面了

3、打开(反序列化)

和序列化一样,非常简单

Imports System.IO
Imports System.Runtime.Serialization.Formatters.BinaryModule Module1Sub Main()DoDim a As String = "qwert"Dim b As New Class1Select Case Console.ReadLine()Case 1'''               Case 2'''Case 3Dim fs = New FileStream("J:\桌面文件\a.bin", FileMode.Open)Dim bf = New BinaryFormatterDim a1 = bf.Deserialize(fs)Console.WriteLine(a1)fs.Close()Case 4Dim fs = New FileStream("J:\桌面文件\b.bin", FileMode.Open)Dim bf = New BinaryFormatterDim b1 = bf.Deserialize(fs)Console.WriteLine(b1)fs.Close()End SelectLoopEnd SubEnd Module
<Serializable>
Class Class1Dim a As String = "asd"Dim b As String = "dfg"
End Class

输入2后,输入4的结果(由于并没有对class1做内部值的提取,故返回类名)

 

4、应用场景

1、在游戏

角色的位置,角色的状态,物体的状态都可以通过序列化来保存,方便第二次登录时的读取,唯一不方便的是后期数据出错维护起来麻烦(程序员可以编写对应类型的编辑器程序来维护这些可能出错的文件)

2、Socket网络编程

在进行.net的网络通信中,一个一个字节头文件识别起来非常麻烦,而且出错几率极高,而直接使用序列化后的文件传输将会大大减少编程难度和出错几率

3、对于特定类型文件的存储

例如我开发了一个CAD交互系统,我想存储所有的CAD变量,那么最简单的就是直接把自己编写的CAD类存在用户的计算机内,方便下一次修改和使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android OTA

一、OTA运行原理 Android 平台提供 Google diff arithmetic 差分机制&#xff0c;升级包支持完整升级以及差分升级&#xff0c;OTA 运行原理图如下所示。 1. OTA Server 负责对更新包进行上传&#xff0c;下载以及版本的管理。 2. 开发者在修改 Android 系统后&#xff0c;通…

Untiy基础学习(三)Untiy中编写脚本的基本规则

一、怎么创建脚本 在Project窗口下&#xff0c;右键Create C#Script 即可创建脚本 创建脚本的注意事项 &#xff1a; 1&#xff09;类名和文件名必须一致,不然不能挂载&#xff08;因为反射机制创建对象&#xff0c;会通过文件名去找Type&#xff09; 2&#xff09;没有特殊需…

VBA宏即根据第一列的内容和第二列的数字,按照数字数量生成对应内容并依次放在第三列、第四列等

打开你的 Excel 工作表。按下 Alt F11 组合键&#xff0c;打开 VBA 编辑器。在 VBA 编辑器中&#xff0c;点击 插入 -> 模块。在模块窗口中&#xff0c;输入以下 VBA 代码&#xff1a; Sub GenerateItems()Dim lastRow As LongDim i As Long, j As LongDim item As String…

深度学习系统学习系列【1】之基本知识

文章目录 说明基础知识人工智能、机器学习、深度学习的关系机器学习传统机器学习的缺陷选择深度学习的原因深度学习的关键问题深度学习的应用深度学习的加速硬件GPU环境搭建主流深度学习框架对比 说明 文章属于个人学习笔记内容&#xff0c;仅供学习和交流。内容参考深度学习原…

论文笔记-基于多层感知器(MLP)的多变量桥式起重机自适应安全制动与距离预测

《IET Cyber-Systems and Robotics》出版山东大学 Tenglong Zhang 和 Guoliang Liu 团队的研究成果&#xff0c;文章题为“Adaptive Safe Braking and Distance Prediction for Overhead Cranes With Multivariation Using MLP”。 摘要 桥式起重机的紧急制动及其制动距离预测是…

DeepSeek实战--各版本对比

1.对比 版本参数量优势劣势使用场景竞品DeepSeek-V36710亿&#xff08;MoE架构&#xff0c;激活370亿&#xff09;开源、高效推理&#xff08;60 TPS&#xff09;、低成本&#xff08;API费用低&#xff09;、中文处理能力突出&#xff08;90%准确率多模态能力有限通用任务&am…

从0开始建立Github个人博客(hugoPaperMod)

从0开始建立Github个人博客(hugo&PaperMod) github提供给每个用户一个网址&#xff0c;用户可以建立自己的静态网站。 一、Hugo hugo是一个快速搭建网站的工具&#xff0c;由go语言编写。 1.安装hugo 到hugo的github标签页Tags gohugoio/hugo选择一个版本&#xff0c…

【AI论文】WebThinker:赋予大型推理模型深度研究能力

摘要&#xff1a;大型推理模型&#xff08;LRMs&#xff09;&#xff0c;如OpenAI-o1和DeepSeek-R1&#xff0c;展示了令人印象深刻的长期推理能力。 然而&#xff0c;他们对静态内部知识的依赖限制了他们在复杂的知识密集型任务上的表现&#xff0c;并阻碍了他们生成需要综合各…

Linux_sudo命令的使用与机制

1、sudo命令的作用 sudo&#xff08;全称 superuser do&#xff09;是 Linux/Unix 系统中权限管理的核心工具。 允许普通用户在授权下以其他用户&#xff08;默认是 root&#xff09;的权限执行命令&#xff0c;而无需直接登录账户。 2、sudo命令的典型使用场景 sudo 覆盖了系…

Scrapy框架之 中间件的使用

爬虫中间件 特点&#xff1a;主要处理蜘蛛&#xff08;Spider&#xff09;和下载器&#xff08;Downloader&#xff09;之间的请求和响应。可以对蜘蛛生成的请求进行拦截、修改或过滤&#xff0c;也可以对下载器返回给蜘蛛的响应进行处理。适用场景&#xff1a; 请求过滤与修改…

供应链算法整理(一)--- 销量预估

在供应链管理领域有较多的预估场景&#xff0c;例如送达时长预估、销量预估、用电量预估。特别的在智能供应链领域&#xff0c;销量和库存的管理的智能化也依赖销量预估&#xff0c;因此在本文我们整理了 销量预估的算法详细的技术方案。 时间序列预测在最近两年内发生了巨大的…

第4篇:服务层抽象与复用逻辑

在业务系统复杂度指数级增长的今天&#xff0c;服务层&#xff08;Service Layer&#xff09;的合理设计直接影响着系统的可维护性和扩展性。本文将深入剖析 Egg.js 框架中的服务层架构设计&#xff0c;从基础实现到高级封装&#xff0c;全方位讲解企业级应用的开发实践。 一、…

Java学习手册:Spring 数据访问

一、Spring JDBC JdbcTemplate &#xff1a;Spring JDBC 提供了 JdbcTemplate 类&#xff0c;它简化了数据库操作&#xff0c;提供了丰富的 API 来执行数据库访问任务。JdbcTemplate 可以自动处理数据库连接的获取、释放&#xff0c;SQL 语句的执行&#xff0c;结果集的处理等…

递归、搜索和回溯算法《递归》

在之前的优选算法当中我们已经学习了一些基本的算法&#xff0c;那么接下来我们就要来学习算法当中的一大重要章节——递归、搜索和回溯算法&#xff0c;其实也就是大家常常听到的dfs、bfs&#xff1b;其实本质就是递归&#xff0c;在学习搜索、回溯等算法的过程当中我们会先来…

Java进阶--设计模式

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化&#xff0c;设计模式是软件工程的基石&#xff0c;如同大厦的一块块砖石一样&#xff0…

如何禁止AutoCAD这类软件联网

推荐二、三方法&#xff0c;对其他软件影响最小 一、修改Hosts文件 Hosts文件是一个存储域名与IP地址映射关系的文本文件&#xff0c;通过修改Hosts文件可以将AutoCAD的域名指向本地回环地址&#xff08;127.0.0.1&#xff09;&#xff0c;从而实现禁止联网的目的。具体步骤如…

深度学习框架搭建(Vscode/Anaconda/CUDA/Pytroch)

目录 ​​​​​​一 Vscode安装 二、Anaconda安装 三、更新显卡驱动 四、安装CUDA 五、安装Pytorch 六、Vscode配置 七、出现的问题汇总 ​​​​​​一 Vscode安装 在 Windows 上安装 访问 VS Code 官网 https://code.visualstudio.com/&#xff0c;点击 "Downl…

结构模式识别理论与方法

我们在前文《模式识别的基本概念与理论体系》中就已经提及“模式分类”。 具体内容看我的CSDN文章&#xff1a;模式识别的基本概念与理论体系-CSDN博客 模式的识别方法主要有统计模式识别方法和结构模式识别方法两大类。统计模式识别方法提出得较早&#xff0c;理论也较成熟…

12.多边形的三角剖分 (Triangulation) : Fisk‘s proof

目录 1.Fisks proof Trangulation Coloring Domination Pigeon-Hold Principle Generation 2.Orthogonal Polygons (正交多边形) Necessity of floor(n4) Sufficiency by convex Quadrilateralization Generalization 1.Fisks proof Trangulation 引入内对角线&…

面经-计算机网络——OSI七层模型与TCP/IP四层模型的对比详解

OSI七层模型与TCP/IP四层模型的对比详解 一、图示解析&#xff1a;分层封装结构 你提供的图清晰展示了网络通信中从应用层到物理层的封装过程&#xff0c;每一层都会对上层的数据加上自己的头部信息&#xff08;Header&#xff09;&#xff1a; 应用层&#xff1a; 应用…