精华内容
下载资源
问答
  • C#序列化和序列化到底是什么意思

    千次阅读 2015-05-22 16:17:03
    源自:...序列化就是一个对象保存到一个文件或数据库字段中去,序列化就是在适当的时候这个文件再转化成原来的对象使用。 我想最主要的作用有: 1
    源自:http://zhidao.baidu.com/link?url=7Ax5j_olBu_q3FzzMnyx1hV1uacZnt9b20k2Hq8aa8BKg_by9xktvUFLigValYA86XcoFQNbCj1UaMHn_62kHa
    回答1:
    序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用。 
    我想最主要的作用有: 
    1、在进程下次启动时读取上次保存的对象的信息 
    2、在不同的AppDomain或进程之间传递数据 
    3、在分布式应用系统中传递数据
    回答2:
    序列化,其实就是将对象的状态信息转换为可以存储或传输的数据形式。

    比如有这样一个类

    class User{
    public string UserName;
    public string Password;
    }

    我们可以把它的实例转换为这样的xml
    <User>
    <UserName>value</UserName>
    <Password>value</Password>
    </User>
    可以认为这样就是序列化。
    回答3:
    你就这样理解就行了,序列化就是将对象变成一堆字符,反序列化就是将这堆字符还原成对象。 
    楼上的兄弟,序列化可不一定会保存到文件或数据库中哦,可能只在内存中。
    展开全文
  • JS中的斜杠 (\)是什么意思

    千次阅读 2019-09-03 19:28:42
    那么,为什么本来正常的代码,要加上斜杠呢,他的作用是什么呢 我们先来看一段代码 vartxt="Wearetheso-called\"Vikings\"fromthenorth." document.write(txt) 在 JavaScript 中,字符串使用单引号或者双引号来...

    在js中我们经常能看到“\”。让人有一种看不懂的错觉。那么,为什么本来正常的代码,要加上反斜杠呢,他的作用是什么呢

    我们先来看一段代码

    1. var txt="We are the so-called \"Vikings\" from the north."
    2. document.write(txt)

    在 JavaScript 中,字符串使用单引号或者双引号来起始或者结束。这意味着上面的字符串将被截为:We are the so-called。

    而 \"Vikings\" 中的加上反斜杠 (\)。这样就可以把每个双引号转换为字面上的字符串。也就是会被输出结果"Vikings"

    这样大家应该就明白了吧,因为一些特殊字符在js语法中有特定的作用,而不是一个文本字符串。所以需要“\”来转义成字符串

    面的表格列出了其余的特殊字符,这些特殊字符都可以使用反斜杠来添加到文本字符串中:

    \'     单引号
    \"     双引号
    \&     和号
    \\     反斜杠
    \n     换行符
    \r     回车符
    \t     制表符
    \b     退格符
    \f     换页符

    看代码的时候,理解是一个去掉\的字符即可

    展开全文
  • 问题1:c汇编是什么意思呢? 回答: 汇编(Disassembly):目标代码转为汇编代码的过程,也可以说是机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的...
    问题1:c反汇编是什么意思呢?
    
    回答:
    反汇编(Disassembly):把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思,常用于软件破解(例如找到它是如何注册的,从而解出它的注册码或者编写注册机)、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言代码都有相当大的帮助,在此过程中我们可以领悟到软件作者的编程思想。总之一句话:软件一切神秘的运行机制全在反汇编代码里面。
    补充:
    C反汇编过来就不再是C了,变成汇编语言程序了,这个目前较高水平的人应该是求伯君,此人汇编水平在苹果、微软、google为之震撼。


    问题2:将十进制数25.7转换成等值的二进制数和十六进制数为多少?
    如果是浮点
    十六进制:41CD999A
    二进制:01000001110011011001100110011010
    具体算法可参考IEEE745标准
    展开全文
  • 序列化和序列化的底层实现原理是什么

    万次阅读 多人点赞 2018-04-07 13:53:41
    遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化、什么是反序列化、什么场景的时候才会用到等,然后面试官说:那你能说一下序列化和序列化底层是如何实现的吗?一脸懵逼,然后回家等通知! 一...

    序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化、什么是反序列化、什么场景的时候才会用到等,然后面试官说:那你能说一下序列化和反序列化底层是如何实现的吗?一脸懵逼,然后回家等通知!

    一、基本概念

    1、什么是序列化和反序列化

    (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;

    (2)**序列化:**对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。

    (3)**反序列化:**客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。

    (4)本质上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。

    2、为什么需要序列化与反序列化

    我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。

    那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的!如何做到呢?这就需要Java序列化与反序列化了!

    换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。

    当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。

    总的来说可以归结为以下几点:

    (1)永久性保存对象,保存对象的字节序列到本地文件或者数据库中;
    (2)通过序列化以字节流的形式使对象在网络中进行传递和接收;
    (3)通过序列化在进程间传递对象;

    3、序列化算法一般会按步骤做如下事情:

    (1)将对象实例相关的类元数据输出。
    (2)递归地输出类的超类描述直到不再有超类。
    (3)类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值。
    (4)从上至下递归输出实例的数据

    二、Java如何实现序列化和反序列化

    1、JDK类库中序列化和反序列化API

    (1)java.io.ObjectOutputStream:表示对象输出流;

    它的writeObject(Object obj)方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中;

    (2)java.io.ObjectInputStream:表示对象输入流;

    它的readObject()方法源输入流中读取字节序列,再把它们反序列化成为一个对象,并将其返回;

    2、实现序列化的要求

    只有实现了Serializable或Externalizable接口的类的对象才能被序列化,否则抛出异常!

    3、实现Java对象序列化与反序列化的方法

    假定一个User类,它的对象需要序列化,可以有如下三种方法:

    (1)若User类仅仅实现了Serializable接口,则可以按照以下方式进行序列化和反序列化

    ObjectOutputStream采用默认的序列化方式,对User对象的非transient的实例变量进行序列化。
    ObjcetInputStream采用默认的反序列化方式,对对User对象的非transient的实例变量进行反序列化。

    (2)若User类仅仅实现了Serializable接口,并且还定义了readObject(ObjectInputStream in)和writeObject(ObjectOutputSteam out),则采用以下方式进行序列化与反序列化。

    ObjectOutputStream调用User对象的writeObject(ObjectOutputStream out)的方法进行序列化。
    ObjectInputStream会调用User对象的readObject(ObjectInputStream in)的方法进行反序列化。

    (3)若User类实现了Externalnalizable接口,且User类必须实现readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法,则按照以下方式进行序列化与反序列化。

    ObjectOutputStream调用User对象的writeExternal(ObjectOutput out))的方法进行序列化。
    ObjectInputStream会调用User对象的readExternal(ObjectInput in)的方法进行反序列化。

    4、JDK类库中序列化的步骤

    步骤一:创建一个对象输出流,它可以包装一个其它类型的目标输出流,如文件输出流:

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\object.out"));
    

    步骤二:通过对象输出流的writeObject()方法写对象:

    oos.writeObject(new User("xuliugen", "123456", "male"));
    

    5、JDK类库中反序列化的步骤

    步骤一:创建一个对象输入流,它可以包装一个其它类型输入流,如文件输入流:

    ObjectInputStream ois= new ObjectInputStream(new FileInputStream("object.out"));
    

    步骤二:通过对象输出流的readObject()方法读取对象:

    User user = (User) ois.readObject();
    

    说明:为了正确读取数据,完成反序列化,必须保证向对象输出流写对象的顺序与从对象输入流中读对象的顺序一致。

    6、序列化和反序列化的示例

    为了更好地理解Java序列化与反序列化,举一个简单的示例如下:

    public class SerialDemo {
    
        public static void main(String[] args) throws IOException, ClassNotFoundException {
    	    //序列化
            FileOutputStream fos = new FileOutputStream("object.out");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            User user1 = new User("xuliugen", "123456", "male");
            oos.writeObject(user1);
            oos.flush();
            oos.close();
    		//反序列化
            FileInputStream fis = new FileInputStream("object.out");
            ObjectInputStream ois = new ObjectInputStream(fis);
            User user2 = (User) ois.readObject();
            System.out.println(user2.getUserName()+ " " + 
    	        user2.getPassword() + " " + user2.getSex());
            //反序列化的输出结果为:xuliugen 123456 male
        }
    }
    
    public class User implements Serializable {
        private String userName;
        private String password;
        private String sex;
        //全参构造方法、get和set方法省略
    }
    
    

    object.out文件如下(使用UltraEdit打开):

    这里写图片描述

    注:上图中0000000h-000000c0h表示行号;0-f表示列;行后面的文字表示对这行16进制的解释;对上述字节码所表述的内容感兴趣的可以对照相关的资料,查阅一下每一个字符代表的含义,这里不在探讨!

    类似于我们Java代码编译之后的.class文件,每一个字符都代表一定的含义。序列化和反序列化的过程就是生成和解析上述字符的过程!

    序列化图示:

    这里写图片描述

    反序列化图示:

    这里写图片描述

    三、相关注意事项

    1、序列化时,只对对象的状态进行保存,而不管对象的方法;

    2、当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

    3、当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

    4、并非所有的对象都可以序列化,至于为什么不可以,有很多原因了,比如:

    • 安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行RMI传输等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的;

    • 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分配,而且,也是没有必要这样实现;

    5、声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态,transient代表对象的临时数据。

    6、序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。为它赋予明确的值。显式地定义serialVersionUID有两种用途:

    • 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;

    • 在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。

    7、Java有很多基础类已经实现了serializable接口,比如String,Vector等。但是也有一些没有实现serializable接口的;

    8、如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存!这是能用序列化解决深拷贝的重要原因;

    四、总结

    看到这里,可能已经让我们很满足了,毕竟已经知道了我们平时使用的序列化和反序列化是如何进行操作的,Java给我们提供了哪些接口可供使用,也比我们最初知道的简单的什么是序列化、反序列化以及作用多了很多!后续内容我们也会不断在讨论和更新!


    参考文章:

    1、https://zhidao.baidu.com/question/688891250408618484.html
    2、https://blog.csdn.net/morethinkmoretry/article/details/5929345
    3、https://www.jianshu.com/p/edcf7bd2c085
    4、https://blog.csdn.net/xiaocaidexuexibiji/article/details/22692097

    在这里插入图片描述

    【视频福利】2T免费学习视频,搜索或扫描上述二维码关注微信公众号:Java后端技术(ID: JavaITWork)回复:1024,即可免费获取!内含SSM、Spring全家桶、微服务、MySQL、MyCat、集群、分布式、中间件、Linux、网络、多线程,Jenkins、Nexus、Docker、ELK等等免费学习视频,持续更新!

    展开全文
  • 致 Python 初学者

    万次阅读 多人点赞 2019-11-10 00:03:26
    正确的做法是指定python版本,-m是python解释器的参数,意思pip模块做为脚本运行,完整命令如下: py -3 -m pip install 5.2 使用Anaconda,或者通过IDE来安装模块 如果你使用的是Anaconda Python,或者你是通过...
  • 以后,可以通过从存储区中读取或序列化对象的状态,重新创建该对象。 序列化使其他代码可以查看或修改,那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 ...
  • 什么是序列化和序列化?

    千次阅读 2021-02-03 10:04:57
    Java序列化就是指字节序列恢复为Java对象的过程。 (2)序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。 序列化的最重要...
  • 什么是反事实推理?

    千次阅读 2018-05-25 05:07:07
    &#13; &#13; &#13; &#13; &#13; &#13; &#13; 事实推理又称事实思维,是指对过去已经发生的事实进行否定而重新表征,以建构一种可能性假设的思...
  • 要了解焊盘的作用,首先要搞明白负片工艺的含义,下面我们对负片的含义做个详细的介绍,具体如下: Ø负片是因为底片制作出来后,要的线路或铜面是透明的,而不要的部份则为黑色或棕色的,经过线路制程曝光后,...
  • ( Java面试题 | Java学习指南 ) ※编译 Compile 将一个 *.java文件编译成 ...※编译 Decompile 在.class文件里包含了完全的信息,包含类名、方法、属性、注解,除了注释文字之外的所有信息。所以从.class文件可...
  • 爬虫,到底是怎么回事儿?

    千次阅读 多人点赞 2020-09-03 18:18:00
    有位被爬虫摧残的读者留言问:「网站经常被外面的爬虫程序骚扰怎么办,有什么方法可以阻止爬虫吗?」这是个好问题,自从 Python 火了起来,编写爬虫程序的门口越来越低,爬取别人网站数据也...
  • I/O 是什么意思

    千次阅读 2020-09-01 15:46:54
    浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Output,随后新浪服务器网页发过来,这个动作是从外面接收数据,叫Input。所以,通常,程序完成IO操作会有Input和Output两个...
  • 【控制理论】滑模控制最强解析

    万次阅读 多人点赞 2019-05-16 21:01:20
    什么是干扰?如果你的机器好端端地在工作,突然来了一个熊孩子拿起一钉锤就是一顿敲;或者工厂附近有高铁,每隔一段时间地面就要抖两下。滑模控制对扰动有很强的抑制能力,这对于在复杂环境工作下的机器来说非常友好...
  • 遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的...
  • 现在拿到一份虚机环境然后想环境中的war还原成代码,编译嘛,我觉得大部分人都接触过,看看源码啊啥的。先简单说说本次我用到的编译工具。首先说推荐的好用的工具JD,基本语法都正常,而且保留了编译后的那些...
  • 什么是反汇编

    千次阅读 2013-06-22 22:19:18
    汇编:目标代码转为汇编代码的过程,也可说是机器语言转为汇编语言代码,低级转高级的意思,常用于软件破解。  通常,编写程序是利用高级语言如C,pascal等高级语言进行编程的,然后再经过编译程序生成...
  • 那是我大一的时候,距现在四五年了,那时候我甚至还没有听过“内卷”这个词,却无意间完成了一件内卷的标准案例。当时我们物理班和计算机班一起上数学分析,每班十六个人,加起来一共三十二人。有一次课上,老师...
  • 步进电机之步进电机驱动器使用说明

    万次阅读 多人点赞 2017-12-31 18:18:36
    (这里需要注意的是并不是设置细分数越大越好,400细分的意思就是:400个脉冲电机转动1圈) 2.电流大小设定 驱动板上 拨码开关4、5、6分别对应S4、S5、S6 .   (这里需要注意的是并不是...
  • a,什么叫序列化和序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个...
  • Java回调机制是什么意思

    千次阅读 2017-09-25 09:16:47
    一、Java回调机制是什么意思 Java中的回调机制是什么意思呢?所谓回调:就是A类中调用B类中的某个方法C,然后B类中过来调用A类中的方法D,D这个方法就叫回调方法。百度百科中对Java回调机制是这样解释的: 软件...
  • 遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的...
  • 上一篇文章已经介绍过卷积的实现,这篇文章我们学习卷积原理,同样,在了解卷积原理后,在后面手写python代码实现卷积。 1 卷积原理 卷积原理不太好用文字描述,这里直接以一个简单例子描述卷积过程...
  • C语言switch选择结构

    万次阅读 多人点赞 2019-06-10 10:40:10
    switch和if—else if一样都可以做多分支选择,但是switch语句的思想是程序所有可能出现的值 的情况,列出一个情况表,根据所输入的值判断与情况表中的的那种情况相同,直接执行相应情况下的语句即可。可直接处理相...
  • 智课雅思词汇---十九、前缀se是什么意思 一、总结 一句话总结:前缀:se-表示“分开, 离开, 区别开” 前缀:se- 【词根含义】:分离 【同源单词】:secede,secession,secessionism,secrecy,secret 前缀:se-...
  • 1、序列化是干什么的?...如果需要序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象。 序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆
  • linux中的shell是什么意思

    千次阅读 2017-04-12 17:40:16
    这个命令行三个单词组成的字符串how are you作为一个整体赋值给变量abc. abc1='@LOGNAME,how are you!' (bash/pdksh) set abc1='$LOGNAME,how are you!' (tcsh) abc2="$LOGNAME,how are you!" (bash/...
  • 在Java中斜杠和斜杠都有各自不同的意思,其中: 斜杠“/”表示地址路径的下一级目录;也表示除号;双斜杠表示注释。 斜杠“\”表示转义字符, 例如:要做制表,可以输入:\t;做换行:\n等。 如果要输出...
  • 这种爬虫手段被广泛应用在一线互联网企业的产品中,例如汽车资讯类网站、小说类网站等文字密度较大的站点。在开始学习之前,我们先来看看具体的现象。打开网址: https://implicit-style-css_0.crawler-lab.com ...
  • jmeter正则表达式提取器的“?”是什么意思?怎么匹配?
  • 那么到底,什么是反编译分析呢? 简单来说,编译分析就是一种从源代码层面上分析APP安全性的手段。我们通过审计源码,来发现应用程序可能存在的漏洞。 我们知道,APP的编译有两种编译方式,dex2jar和apktool...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,315
精华内容 72,126
关键字:

反把是什么意思