序列化与反序列化

C#数据加密-序列化 C#中使用序列化对数据加密 阅读详情

序列化是把一个内存中的对象的信息转化成一个可以持久化保存的形式,以便于保存或传输,序列化的主要作用是不同平台之间进行通信,常用的有序列化有json、xml、文件等,下面就逐个讲下这三种序列化的方法。


一、序列化为json


C#中用于对象和json相互转换的原生类有两个:DataContractJsonSerializer和JavaScriptSerializer,其中JavaScriptSerializer主要用于web的浏览器和服务器之间的通信。这里主要讲DataContractJsonSerializer的使用,要使用DataContractJsonSerializer,先要在项目中引用System.Runtime.Serialization。首先准备一个测试的类Book:

[DataContract]
    class Book
    {
        [DataMember]
        public int ID { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public float Price { get; set; }
    }

[DataContract]指定该类型要定义或实现一个数据协定,并可由序列化程序(如 System.Runtime.Serialization.DataContractSerializer)进行序列化。
[DataMember]当应用于类型的成员时,指定该成员是数据协定的一部分并可由 System.Runtime.Serialization.DataContractSerializer进行序列化。
然后先创建一个Book对象,实例化一个DataContractJsonSerializer实例,最后用该实例的WriteObject()方法将对象写到流中,代码如下:
class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
 
             //序列化json
             DataContractJsonSerializer formatter= new DataContractJsonSerializer(typeof(Book));
             using (MemoryStream stream = new MemoryStream())
             {
                 formatter.WriteObject(stream, book);
                 string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                 Console.WriteLine(result);
             }
         }
     }
程序的输出结果如图:

将一个json格式的字符串反序列化为对象是用DataContractJsonSerializer实例的ReadObject()方法,代码如下:
class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };15 
             //反序列化json
             string oriStr = "{\"ID\":101,\"Name\":\"C#程序设计\",\"Price\":79.5}";
             DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(Book));
             using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(oriStr)))
             {
                 Book outBook = formatter.ReadObject(stream) as Book;
                 Console.WriteLine(outBook.ID);
                 Console.WriteLine(outBook.Name);
                 Console.WriteLine(outBook.Price);
             }
             Console.Read();
         }
     }
程序输出结果如图:


我们也可以把上面的json序列化与反序列为封装成泛型方法,这样可以公用,全部代码如下:

class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
 
             //序列化json
             string result = Serializer.ObjectToJson<Book>(book);
             Console.WriteLine(result);
 
             //反序列化json
             string oriStr = "{\"ID\":101,\"Name\":\"C#程序设计\",\"Price\":79.5}";
             Book outBook = Serializer.JsonToObject<Book>(oriStr);
             Console.WriteLine(outBook.ID);
             Console.WriteLine(outBook.Name);
             Console.WriteLine(outBook.Price);
 
             Console.Read();
         }
     }
 
     public class Serializer
     {
         /// 将对象序列化为json文件
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="t">实例</param>
         /// <param name="path">存放路径</param>
         public static void ObjectToJson<T>(T t, string path) where T : class
         {
             DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
             using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
             {
                 formatter.WriteObject(stream, t);
             }
         }
 
         /// <summary>
         /// 将对象序列化为json字符串
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="t">实例</param>
         /// <returns>json字符串</returns>
         public static string ObjectToJson<T>(T t) where T : class
         {
             DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
             using (MemoryStream stream = new MemoryStream())
             {
                 formatter.WriteObject(stream, t);
                 string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                 return result;
             }
         }
 
         /// <summary>
         /// json字符串转成对象
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="json">json格式字符串</param>
         /// <returns>对象</returns>
         public static T JsonToObject<T>(string json) where T : class
         {
             DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(Book));
             using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
             {
                 T result = formatter.ReadObject(stream) as T;
                 return result;
             }
         }                  
     }

二、序列化为xml


C#中将对象序列化和反序列化为xml的类是XmlSerializer,要引用System.Xml.Serialization
先创建一个XmlSerializer对象实例,然后用实例的Serialize的方法将对象写入到文件流中,代码如下:

class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
 
             XmlSerializer formatter = new XmlSerializer(typeof(Book));
             using (FileStream stream = new FileStream(@"c:\book.xml", FileMode.OpenOrCreate))
             {
                 formatter.Serialize(stream, book);
             }
             Console.Read();
         }
     }

程序运行后会在c盘产生一个book.xml文件,内容如下:

当然也可以将对象转换成对象流,然后转换成xml格式的字符串,代码和效果图如下:

class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
 
             XmlSerializer formatter = new XmlSerializer(typeof(Book));
             using (MemoryStream stream = new MemoryStream())
             {
                 formatter.Serialize(stream, book);
                 string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());//转换成xml字符串
                 Console.WriteLine(result);
             }
             Console.Read();
         }
     }

将xml文件反序列化的方法是用XmlSerializer实例的Deserialize()方法,代码如下:
class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
 
             XmlSerializer formatter = new XmlSerializer(typeof(Book));
             using (FileStream stream = new FileStream(@"c:book.xml", FileMode.OpenOrCreate))
             {
                 XmlReader xmlReader = new XmlTextReader(stream);
                 Book outBook = formatter.Deserialize(xmlReader) as Book;//反序列化
                 Console.WriteLine(outBook.ID);
                 Console.WriteLine(outBook.Name);
                 Console.WriteLine(outBook.Price);
             }
             Console.Read(); 
         }
     }
程序执行完成效果如图:


我们同样也可以把上面的xml序列化与反序列为封装成泛型方法,这样可以公用,全部代码如下:

class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
             
             //序列化xml
             Serializer.ObjectToXml(book, @"c:\book.xml");
 
             //反序列化xml
             Book outBook = Serializer.XmlToObject(book, @"c:\book.xml");
             Console.WriteLine(outBook.ID);
             Console.WriteLine(outBook.Name);
             Console.WriteLine(outBook.Price);
             Console.Read();
         }
     }
 
     public class Serializer
     {     
         /// <summary>
         /// 将对象序列化为xml文件
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="t">对象</param>
         /// <param name="path">xml存放路径</param>
         public static void ObjectToXml<T>(T t,string path) where T : class
         {
             XmlSerializer formatter = new XmlSerializer(typeof(T));
             using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
             {
                 formatter.Serialize(stream, t);
             }
         }
 
         /// <summary>
         /// 将对象序列化为xml字符串
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="t">对象</param>
         public static string ObjectToXml<T>(T t) where T : class
         {
             XmlSerializer formatter = new XmlSerializer(typeof(T));
             using (MemoryStream stream = new MemoryStream())
             {
                 formatter.Serialize(stream, t);
                 string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                 return result;
             }
         }
 
         /// <summary>
         /// 将xml文件反序列化为对象
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="t">对象</param>
         /// <param name="path">xml路径</param>
         /// <returns>对象</returns>
         public static T XmlToObject<T>(T t, string path) where T : class
         {
             XmlSerializer formatter = new XmlSerializer(typeof(T));
             using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
             {
                 XmlReader xmlReader = new XmlTextReader(stream);
                 T result = formatter.Deserialize(xmlReader) as T;
                 return result;
             }
         }       
     }

三、序列化为文件


C#中将对象序列化和反序列化为二进制文件的类是BinaryFormatter,要引用System.Runtime.Serialization.Formatters.Binary
先创建一个BinaryFormatter对象实例,然后用实例的Serialize的方法将对象写入到文件流中,代码如下:
class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
 
             //序列化文件
             BinaryFormatter formatter = new BinaryFormatter();
             using (FileStream stream = new FileStream(@"c:\book.txt", FileMode.OpenOrCreate))
             {
                 formatter.Serialize(stream, book);
             }
             Console.Read();
         }
     }
可以通过BinaryFormatter类型实例的Deserialize()方法把二进制文本反序列化为对象,代码如下:

class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
 
             //序列化文件
             BinaryFormatter formatter = new BinaryFormatter();
             using (FileStream stream = new FileStream(@"c:\book.txt", FileMode.OpenOrCreate))
             {
                 Book outBook = formatter.Deserialize(stream) as Book;
                 Console.WriteLine(outBook.ID);
                 Console.WriteLine(outBook.Name);
                 Console.WriteLine(outBook.Price);
             }
             Console.Read();
         }
     }
我们同样也可以把序列化和把序列化为二进制文件的方法封装成泛型方法,全部代码如下:

class Program
     {
         static void Main(string[] args)
         {
             Book book = new Book() { ID = 101, Name = "C#程序设计", Price = 79.5f };
             //序列化文件
             Serializer.ObjectToFile(book, @"c:\book.txt");
 
             //反序列化文件
             Book outBook = Serializer.FileToObject<Book>(@"c:\book.txt") as Book;
             Console.WriteLine(outBook.ID);
             Console.WriteLine(outBook.Name);
             Console.WriteLine(outBook.Price);
             Console.Read();
         }
     }
 
     public class Serializer
     {
         #region 文件序列化
         /// <summary>
         /// 将对象序列化为字符串
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="t">实例</param>
         /// <returns>字符串</returns>
         public static string ObjectToString<T>(T t)
         {
             BinaryFormatter formatter = new BinaryFormatter();
             using (MemoryStream stream = new MemoryStream())
             {                
                 formatter.Serialize(stream, t);
                 string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                 return result;
             }
         }
 
         /// <summary>
         /// 将对象序列化为文件
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="t">实例</param>
         /// <param name="path">存放路径</param>
         public static void ObjectToFile<T>(T t, string path)
         {
             BinaryFormatter formatter = new BinaryFormatter();
             using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
             {                
                 formatter.Serialize(stream, t);
                 stream.Flush();
             }
         }
 
         /// <summary>
         /// 将字符串反序列为类型
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="s">字符串</param>
         /// <returns>对象</returns>
         public static T StringToObject<T>(string s) where T : class
         {
             byte[] buffer = System.Text.Encoding.UTF8.GetBytes(s);
             BinaryFormatter formatter = new BinaryFormatter();
             using (MemoryStream stream = new MemoryStream(buffer))
             {                
                 T result = formatter.Deserialize(stream) as T;
                 return result;
             }
         }
 
         /// <summary>
         /// 将文件反序列化为对象
         /// </summary>
         /// <typeparam name="T">类型</typeparam>
         /// <param name="path">路径</param>
         /// <returns>对象</returns>
         public static T FileToObject<T>(string path) where T : class
         {
             using (FileStream stream = new FileStream(path, FileMode.Open))
             {
                 BinaryFormatter formatter = new BinaryFormatter();
                 T result = formatter.Deserialize(stream) as T;
                 return result;
             }
         }
         #endregion
     }
 
     [Serializable]
     public class Book
     {
         public int ID { get; set; }
         public string Name { get; set; }
         public float Price { get; set; }
     }

vb.net 数组的反序列化不支持类型 json json结构如下: "[ { ""id"":1, ""globalID"":1, ""time"":""2018-01-26T17:20:51.2512497+08:00"", ""type"":""Starting"", ""data"": { } }, {""id"":2, ""globalID"":2, ""time"":""2018-01-26T17:20:52.7303343+08:0 阅读详情

相关推荐

C# 序列化技术全面解析:原理、实现与应用场景

在软件开发中,数据持久化和网络通信是两个至关重要的环节。想象一下,当我们需要将一个复杂的对象保存到文件中,或者通过网络发送到另一台计算机时,如何有效地表示这个对象?这就是序列化技术要解决的问题。序列化(Serialization)是将对象转换为可存储或传输的格式的过程,而反序列化(Deserialization)则是将这些数据重新转换为对象的过程。 C# 作为一门成熟的面向对象编程语言,提供了丰富多样的序列化解决方案。本文将全面探讨 C# 中的各种序列化技术,包括二进制序列化、XML 序列化、JSON 序

vvilkin的学习备忘 1695

C#对象序列化

C# 对象序列化、反序列化

abcwanglinyong的博客 5621

什么是反序列化?反序列化的过程,原理

本篇主要分析java序列化、反序列化的过程,原理, 并且通过简化版URLDNS做案例分析利用链原理。

kali_Ma的博客 2万+

C# 序列化

一、 序列化的概念 序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候 把这个文件再转化成原来的对象使用。 需要分清楚的概念:对象的序列化而不是类的序列化。对象的序列化表明C#提供了将 运行中的对象(实时数据)写入到硬盘文件或者数据库中,此功能可以运用在需要保留 程序运行时状态信息的环境下。 使用序列化有两个最重要的原因: 1)一个原因是将对象的状态永久保存在存储媒体中,以便可以在以后重新创建精确的 副本; 2)另一个原因是通过值将对象从一个应用程序域发送到另一个应用程序域中。 前

weixin_50179860的博客 6214

DRF 之 序列化与反序列化

序列化组件 使用drf的序列化组件: 1 新建一个序列化类继承Serializer 2 在类中写要序列化的字段 在视图中使用序列化的类: 1 实例化序列化的类产生对象,在产生对象的时候,传入需要序列化的对象(queryset) 2 对象.data 3 return Response(对象.data) 高级用法: source:可以指定字段(name publish.name),可以指...

Hello LinWoW~ ⊙o⊙ 2579

C# 序列化与反序列化

在 C# 编程中,序列化和反序列化是非常重要的概念。序列化是将对象转换为可以存储或传输的格式的过程,而反序列化则是将存储或传输的格式转换回对象的过程。这两个过程在许多应用场景中都非常有用,例如保存对象状态、在网络上传输对象、在不同的应用程序之间共享数据等。序列化和反序列化是 C# 编程中非常重要的概念,可以方便地进行数据存储、网络传输和数据共享等操作。在 C# 中,可以使用二进制序列化、XML 序列化和 JSON 序列化等方式进行序列化和反序列化。

2401_83367969的博客 2001

反序列化漏洞详解 一文了解反序列化漏洞

本篇总结归纳反序列化漏洞,包括php、java、python三种语言

闵行小鱼塘 6445

GD32 TIMER0 PWM输出死活没波形?别忘了这个关键配置(附完整代码)

本文详细解析了GD32 TIMER0 PWM输出无波形的常见问题,特别强调了高级定时器特有的主输出使能配置。通过完整的代码示例和调试技巧,帮助开发者快速解决PWM输出问题,适用于无刷电机控制等嵌入式应用场景。

weixin_30906185的博客 397

序列化和反序列化

一、序列化:将 Java 对象转换成字节流的过程 1️⃣序列化过程:是指把一个 Java 对象变成二进制内容,实质上就是一个 byte[]。因为序列化后可以把 byte[] 保存到文件中,或者把 byte[] 通过网络传输到远程(IO),如此就相当于把 Java 对象存储到文件或者通过网络传输出去了。 2️⃣一个 Java 对象要能序列化,必须实现一个特殊的java.io.Serializable接口,它的定义如下: public interface Serializable {} Serializab.

ChineseSoftware的博客 3万+

论文理解【LLM-OR】——【OptiMUS】Scalable Optimization Modeling with (MI)LP Solvers and Large Language Models

OptiMUS 把“自然语言→优化建模与求解”从单次生成改造成“结构化问题 + 多智能体协作 + 连接图检索”的模块化流程,并在更长更难的数据集上验证了这种结构化方法相对端到端 prompting 的优

佚失的诗篇 829

无人驾驶汽车系统入门(三十二)——FEC算法:点云快速欧几里得聚类实战解析

本文深入解析了FEC算法在无人驾驶点云聚类中的高效应用,通过逐点处理策略和体素栅格预分割技术,实现了比传统欧几里得聚类快百倍的速度。文章详细介绍了算法原理、Python实现及参数调优指南,并对比了FEC与传统算法的性能差异,为无人驾驶系统开发提供了实用解决方案。

weixin_29065015的博客 488

Java序列化与反序列化

java序列化 与反序列化知识点

qq_44885775的博客 7655

QCC304x系列开发教程(实战篇)之5.2 QCC3040之提示音

earbud_init.c中,初始化table中UiPrompts_Init /*! \brief Table of initialisation functions */ static const init_table_entry_t appInitTable[] = { ......... {UiPrompts_Init, 0, NULL}, ......... } ui_prompts.c中是提示音音处理的主要逻辑和配置源文件 函数static void uiPro...

心跳包的博客 2395

java之序列化与反序列化

序列化与反序列化的理解

m0_73866527的博客 1684

搭建你的第一个MCP服务器(Python版)

在上两篇博客中,我们已经对MCP(Model Context Protocol)有了初步的了解。MCP是一种强大的协议,能够简化LLM(大型语言模型)与外部工具的交互。今天,我们将通过一个具体的例子,展示如何使用Python搭建一个简单的MCP服务器。通过这个过程,你将能够更好地理解MCP的工作原理,并为后续的应用开发打下基础。在MCP中,工具(Tool)是服务器提供给LLM的接口。我们将定义一个简单的工具,用于接收输入文本并返回处理后的结果。首先,我们需要定义一个工具类。这个工具类将继承自,并实现run。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 8097

21、汽车喷漆目标区域识别:机器学习与深度学习的应用

本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。

5b6n7m8的博客 103

序列化、反序列化

因为:Java对象的构造必须先有父对象,才有子对象,反序列化也不例外,所以反序列化时,为了构造父对象,只能调用父类的无参构造函数作为默认的父对象。)是一种将对象以一连串的字节描述的过程,将程序中的对象,放入硬盘(文件)中保存就是序列化,如果不存放在磁盘中,而是一直存放在内存中,会增大内存的消耗;一些敏感的字段,如用户名密码(用户登录时需要对密码进行传输),我们希望对其进行加密,这时,就可以采用本节介绍的方法在客户端对密码进行加密,服务器端进行解密,确保数据传输的安全性。

qq_37432174的博客 8917

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 355

PHP序列化与反序列化

PHP反序列化 0x00

m0_46587008的博客 3498

Vue3 - Element Plus 全局修改更换主题色配置详细教程,element-plus自定义主题色全局替换主色调强力解决方案,支持动态修改主题颜色/动态皮肤,将默认蓝色主题色更换为其他颜色!

vue3,nuxt3,element-plus,组件库,主题色,修改主题颜色,更换主题色,如何修改组件默认主题蓝色,项目主题色定制,修改失败,主题色覆盖不了,:root直接修改,hover颜色没改,自定义主题色,vue3全局设置elementPlus主题色最新详细修改教程,怎么修改全局的颜色,scss变量,覆盖原来的主题色改为自己的颜色,统一替换,有没有好办法,颜色不变,失败,无效,动态主题切换,主题颜色怎么在项目里直接改,plus主题色更换,覆盖默认主题色,最强最好用,设置主题色,换肤,皮肤,动态更换

🏆 前端领域优质创作者 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

反序列化漏洞3之java序列化与反序列化

定义: 反序列化漏洞是一种在多种编程语言中存在的典型漏洞,特别是在JAVA中。特点: 不同的编程语言具体的利用细节和影响的范围不一样,但概念类似。定义: Vulhub是一个国产的靶场平台,收集了众多中间件漏洞。功能: 支持一键搭建漏洞测试靶场,方便进行漏洞研究和复现。漏洞数量: 目前大概有100多个漏洞,其中反序列化的漏洞就有20多个。使用方式: 通过docker-compose up -d命令启动漏洞环境。课程重点: 本节课将讲解JAVA的反序列化漏洞。

jonhswei的博客 888

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

PHP序列化、反序列化

1.对象被创建时触发__construct()方法,对象使用完被销毁时触发__destruct()方法。2.对象被序列化时触发了__sleep(),字符串被反序列化时触发了__wakeup()//大写字母O表示对象,4是类名长度,test为类名,表示该类有3个成员属性。类型:长度:“值”…admin=admin,passwd=ctf时得到flag,序列化p。admin=admin,passwd=wllm得到flag,序列化p。4.$a->h()调用了不存在的方法触发了__call()方法。

2401_82985722的博客 2480

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java 序列化和反序列化

可以通过实现 readObject 方法来自定义反序列化过程。例如,可以在反序列化时对字段进行额外的验证或初始化。// 不会被默认序列化// 自定义反序列化逻辑// 默认反序列化// 手动反序列化 age// 自定义序列化逻辑// 默认序列化// 手动序列化 age@Override// 序列化// 反序列化。

qq_33807380的博客 1636

【序列化与反序列化详解】

序列化是将对象转换为可存储或传输的格式,反序列化是将数据恢复成对象。常见格式包括 JSON(轻量)、XML(可扩展)、二进制(高效)、Protocol Buffers(高性能)。不同编程语言提供了不同的序列化方案,如 Python、Java、C++。安全性是序列化的关键,避免反序列化漏洞、数据篡改和信息泄露。

武帝为此的博客 1568

【反序列化漏洞01】序列化与反序列化简介

1. 了解序列化与反序列化的作用; 2. 掌握PHP中序列化与反序列化的使用方法。

Fighting_hawk的博客 5022
上一篇: VS2012 快捷键
下一篇: 解决 Actionbar 溢出菜单不显示的问题
拿铁加不加糖
博客等级 码龄16年 75粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值