精华内容
下载资源
问答
  • 谈谈序列化—实体bean一定要实现Serializable接口?

    万次阅读 多人点赞 2017-03-13 17:38:27
    但是由于map每次都匹配key值,很麻烦。所以在之后就将参数传递和返回类型全都改成了实体bean,并且让每个bean都实现了Serializable接口。然后,在这里的时候,就有点疑惑。首先:为什么进行序列化;其次:每个...

    导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型。但是由于map每次都要匹配key值,很麻烦。所以在之后就将参数传递和返回类型全都改成了实体bean,并且让每个bean都实现了Serializable接口。然后,在这里的时候,就有点疑惑。首先:为什么要进行序列化;其次:每个实体bean都必须实现serializabel接口吗?最后:我做一些项目的时候,没有实现序列化,同样没什么影响,然后现在做项目需要序列化,到底什么时候应该进行序列化操作呢?

    本篇文章,是我对于序列化这个话题的一点小小的思考,可能还不太成熟,请每一个路过的人不吝赐教,在此,先谢过了!

    一、什么是序列化

    In computer science, in the context of data storage, serialization is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer, or transmitted across a network connection link) and reconstructed later in the same or another computer environment.[1] When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object.

    那我也有看过很多的博客包括书,但是我之前其实一直不太理解这个序列化,虽然一直都在用。今天在看资料 的时候,发现导致这种现象的原因,可能是我之前看的一些介绍里面,忽略了一个很关键的因素:object state info对象的状态信息 。也就是说,其实序列化,它是完整的保存了某一状态下的对象信息,是一个整体,而不是零散的!我在一个IBM工程师的博客里面看到一个说法,我感觉对于我理解序列化很有帮助,他说序列化的过程,就是一个“freeze”的过程,它将一个对象freeze住,然后进行存储,等到再次需要的时候,再将这个对象de-freeze就可以立即使用。

     

    二、为什么需要序列化

    1,存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。也就是When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object.

    问题:我没有实现序列化的时候,我一样可以存入到我的sqlserver或者MySQL、Oracle数据库中啊,为什么一定要序列化才能存储呢????

    2,便于数据传输,尤其是在远程调用的时候!


    三、到底什么时候一定要序列化

    结合到第二点的问题,就是说在我存储的时候,不通过序列化也一样完美存储,为什么要多此一举?额,经过我阅读文档和书籍,以及做项目的经验总结(反正就是之前混迹在编码中的一系列经验总结),在存储时需要序列化,这是肯定的。大家知道的是序列化是将对象进行流化存储,我们有时候感觉自己在项目中并没有进行序列化操作,也一样是存进去了,那么对象需要经过序列化才能存储的说法,似乎从这儿就给阉割了。事实究竟是怎样的呢?

    首先看我们常用的数据类型类声明:

     

    public final class String implements java.io.Serializable, Comparable<String>, CharSequence

     

    public class Date implements java.io.Serializable, Cloneable, Comparable

    而像其他int、long、boolean类型等,都是基本数据类型,数据库里面有与之对应的数据结构。从上面的类声明来看,我们以为的没有进行序列化,其实是在声明的各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。

     

    拿到这儿的时候,就又有一个问题,既然实体类的变量都已经帮助我们实现了序列化,为什么我们仍然要显示的让类实现serializable接口呢?

    请注意我以上的说法:首先,序列化的目的有两个,第一个是便于存储,第二个是便于传输。我们一般的实体类不需要程序员再次实现序列化的时候,请想两个问题:第一:存储媒体里面,是否是有其相对应的数据结构?第二:这个实体类,是否需要远程传输(或者两个不同系统甚至是分布式模块之间的调用)?

    如果有注意观察的话,发现序列化操作用于存储时,一般是对于NoSql数据库,而在使用Nosql数据库进行存储时,用“freeze”这个说法来理解是再恰当不过了,请在NoSql数据库中,给我找出个varchar,int之类的数据结构出来? 如果没有,但我们又确实需要进行存储,那么,此时程序员再不将对象进行序列化,更待何时?

    备注:如果有人打开过Serializable接口的源码,就会发现,这个接口其实是个空接口,那么这个序列化操作,到底是由谁去实现了呢?其实,看一下接口的注释说明就知道,当我们让实体类实现Serializable接口时,其实是在告诉JVM此类可被序列化,可被默认的序列化机制序列化。

    然后,需要说明的是,当我们在实体类声明实现Serializable接口时,再次进行观察,会发现这些类是需要被远程调用的。也就是说需要或者可能需要被远程调用,这就是序列化便于传输的用途。

    慎重声明:以上所有言论,都是本宝宝经过项目中的具体观察,以及阅读一些文章之后的所谓经验之谈,且看且见谅吧!

     

    三、是否一定要实现Serializable接口序列化

    上回说到了关于序列化的一些基本情况,那么,接下来的一个问题是:如果我们要实现序列化操作,是否一定要通过实现Serializable接口的方式?PS:其实,我只是不明白,为什么大家一提到序列化就说特别简单,实现Serializable接口就OK了?我就一直在想,这是否是目前我们所能拥有的最佳选择?

    请大家先看一篇文章分析:https://github.com/eishay/jvm-serializers/wiki

    文章说得很清楚,图文并茂的,那么多选择,自己看着办吧。不过我最近做的一个项目使用的是protostuff!

     

    四、使用其他序列化实现的优缺点

    诚如大家在第三节分享的链接文章所见,通过实现Serializable接口的方式去进行序列化操作,在性能上来讲并不是最佳选择。那么,在性能考虑的情况下,很多人都会选择其他更为高效率的产品替代serializable接口,现在问题来了:

    1,如果我通过Serializable接口实现,那么我只需要在类声明时实现它即可

    2,如果我通过其他方式实现,那么我将不得不自己重写工具类,不能再通过实现serializable接口的方式去进行序列化了。在使用上,大大的不怎么方便!

    PS:项目中总会用到个什么redis,mongoDB啥的,其实每次存取都有那么一个数据封装处理的过程,额,也差不了这一点了。那么有没有现成的人家封装好的呢?自己找吧,肯定是有的。其实,我就是不明白,如果是用了第三方的工具去实现序列化,那么在序列化进行远程调用的时候,到底应该在哪儿进行显示的序列化或者反序列操作?我刚开始想在Dao层,但这样子的话,自己模块操作不也得来那么一波序列化反序列化操作嘛。因为我目前确实只是在从NoSql数据库中存取数据时用到了第三方的序列化工具,而在远程调用的时候,没有啊!以前都是直接实现Serializable接口的,唉。。。。学艺不精啊!

    跪求指点!!!!!

     

    五、总结

    其实,很长的一段时间里,我一直以为java底层包自带的方法一定会是最好的,包括各个框架,我都更愿意去用它本身就有的工具。但是,可能那些自带的方法,尤其是向Serializable接口,从jdk1.1开始就有了,经过了长时间的考验,性能上可能不是最好的,但它的稳定性绝对是值得肯定的。那么,其实在使用的时候,还是根据自身的情况考虑吧。在技术乃至于架构或者说各种系统设计,最实用最适合的,才是最好了!

    其实我还有一个问题,不见得自己模块会和数据库部署到同一个机器上啊,所以还是得考虑都传输时的序列化问题,那如果使用第三方的工具,不都得来那么一波嘛,这代码量就又活生生的多了那么点儿。唉,不说了,我这是越说越晕,回家吃饭!

     

     

    展开全文
  • C++ 的纯虚函数一定要在子类实现

    千次阅读 2020-04-06 00:10:42
    但是这个接口一定要在子类实现才能通过编译。 但是为什么一定要在子类实现呢???? 首先我们明确一个概念,就是函数申请时我们在函数体里什么都没有写 void func () {} 这样的函数我们称其为空函数,但是...

    C++的纯虚函数作为多态很重要的一环,充当了给子类接口的功能。但是这个接口一定要在子类实现才能通过编译。

    但是为什么一定要在子类实现呢????

    首先我们要明确一个概念,就是函数申请时我们在函数体里什么都没有写

    void func () {}

    这样的函数我们称其为空函数,但是函数体里也是有内容的,内容是空,相当于集合里的空集。所以只要有内容存在就没有问题的可以为函数申请内存。

    但是我们再来看虚函数

    virtual void func () = 0;

    我们直接让虚函数函数等于0,没有函数体的存在,现在就不是空集不空集的问题,而是有没有函数体的问题,也就是说根本没有一个函数体来充当内存的角色,没有内存函数凭什么存在代码区,虽然在类中成员函数并不算类的内存空间,但是其实这些存在代码区的成员函数也是占有一部分内存空间的,具体这个函数的内存大小多大还是要看编译器是怎么计算的。

    所以综上我们知道,一个函数如果想存在一定要有一个函数体。作为类中的函数,他们在类还没有被实例化的时候就已经被实例化并放在代码区里,那么作为虚函数在类中是以虚函数表的形式存在,作为父类的纯虚函数没有函数体,但是虚函数表里的函数可一定要有函数体来实现内存,这是就用到了面向对象(object oriented)非常重要的一个概念——继承,同时这也是虚函数的功能所在——为了给子类提供接口。

    因此基类的纯虚函数没有函数体的这个缺陷就需要靠子类来弥补,让子类的实现纯虚函数,这样在类的虚函数表中,就会将基类的纯虚函数覆盖掉成为子类的这个已经实现了的新虚函数。

    总而言之吧,纯虚函数一定要在子类实现,包含纯虚函数的类绝对不可以被实例化,同时他的子类如果没有实现这个纯虚函数也不可以被实例化!

    
    class A {
    public:
    
        virtual void func () = 0;
    };
    
    class B : public A {
    
    };
    
    class C : public B {
        void func () {
    
        }
    };
    
    int main ()
    {
        //A a;
        //B b;
        C c;
        return 0;
    }
    

     

    展开全文
  • 如果这个方法是抽象的,那么子类必须重写。 除非子类也是一个抽象类。。。
    如果这个方法是抽象的,那么子类必须重写。
    除非子类也是一个抽象类。。。
    展开全文
  • 在有些网页中我们会发现会有这样的现象:某个div会随着屏幕的滚动达到一定高度的时候位置就固定下来了。例如淘宝的导航条:那么这里就需要用到JS的逻辑方法来实现了。下面是HTML代码简单实现:&lt;!DOCTYPE ...

    在有些网页中我们会发现会有这样的现象:某个div会随着屏幕的滚动达到一定高度的时候位置就固定下来了。例如淘宝的导航条:

    那么这里就需要用到JS的逻辑方法来实现了。

    下面是HTML代码简单实现:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <style type="text/css">
            body{
                width:40em;
                margin:0 auto;
            }
            article{
                float:left;
            }
            aside{
                float:right;
            }
            p{
                line-height:3em;
            }
        </style>
    </head>
    <body>
    <article>
        <p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>内容</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p><p>这是一个段落</p>
    </article>
    <aside>
        <p>这里会滚动</p><p>这里会滚动</p><p>这里会滚动</p>
        <div id="fixPara"><p>这个段落到达一定高度会固定</p></div>
    </aside>
    <script type="text/javascript">
        window.οnlοad=
            function(){
                var oDiv = document.getElementById("fixPara"),
                    H = 0,
                    Y = oDiv        
                while (Y) {
                    H += Y.offsetTop; 
                    Y = Y.offsetParent;
                }
                window.onscroll = function()
                {
                    var s = document.body.scrollTop || document.documentElement.scrollTop
                    if(s>H) {
                        oDiv.style = "position:fixed;top:0;"
                    } else {
                        oDiv.style = ""
                    }
                }
            }
    </script>
    </body>
    </html>
    展开全文
  • 我用python写的一个小程序,想每个半分钟运行一次,不知道怎么实现还请各位大神帮忙
  • 有些抽象方法不实现?  分享| 2015-05-27 21:22忆晨儿 | 浏览 1161 次 来自:手机知道  java 2015-05-27 21:32 #2016年高质量新标准全面升级!# 提问者采纳 凡是实现...
  • 接口与实现

    万次阅读 多人点赞 2018-10-29 00:18:23
    一、接口是什么?  接口是抽象的抽象(抽象类是具体的抽象)。... 我不会告诉你任何具体的实现方法,我只会给你一个产品功能的框架,而如果你是我团队的一员,来制作这款运动手表,那么你就一定要把我定义的...
  • 为什么实体类要实现序列化?

    千次阅读 多人点赞 2015-12-16 16:49:44
    简单的说就是每当客户端访问某个开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSession对象都会占用一定的内存,如果在同一个时间段内访问的用户太多,就会消耗大量的服务器内存,为了解决...
  • Java继承与实现的区别与联系

    万次阅读 多人点赞 2018-10-12 09:48:50
    面向对象三个特征:封装、继承、多态。 继承:如果多个类的某个部分的功能相同,那么可以抽象出一个类出来,把他们的相同部分都放到...继承和接口都能实现代码重用,提高开发效率。提现了实物的传递性,继承关系...
  • C++中父类的虚函数必须要实现吗?

    万次阅读 2014-11-19 15:26:06
    C++中父类的虚函数必须要实现吗? class Vir{ public: virtual void tryVirtual(); }; class CVir:public Vir{ public: void tryVirtual(){ std::cout; } }; 二、说明 (1)在main函数中,如果有父类或者...
  • 一、答案  用foreach遍历访问的对象需要实现... 注:不一定要实现IEnumerable接口,但一定要实现GetEnumrator方法。 二、.Net 1.0实现 public class MyListT> : IEnumerable  {  public int Co
  • ONVIF分析与实现原理

    千人学习 2019-06-05 17:41:02
    本课程是RTSP/ONVIF/GB28181系列教程之一,通过分析ONVIF协议信令交互过程,结合ONVIF库(完全自主实现的ONVIF库)的接口设计、模块划分、实现思路及ONVIF相关重要细节,对ONVIF协议作出一定内容讲解(主要包括设备...
  • sigmoid的matlab实现

    万次阅读 2016-10-19 10:45:16
    最近在做神经网络RNN的仿真,发现matlab中竟然没有直接对激活函数sigmoid的实现,看到过别人用python写的代码,于是想改过来用matlab实现一下,也...函数里一定要用点除‘./’,因为是矩阵运算,所以把纬度保持一致。
  • HashMap底层实现原理

    万次阅读 多人点赞 2019-04-24 13:57:56
    HashMap底层实现原理 HashMap是Java语言中用的最频繁的一种数据结构。 1.hashmap的数据结构 了解hashmap首先弄清楚他的结构。在java编程语言中最基本的数据结构有两种,数组和链表。 数组:查询速度快,可以根据...
  • 用C#实现封装

    千人学习 2017-07-23 16:27:52
    本课程主要讲解了C#中属性的封装,方法的应用,构造函数的重载,以及值传递和引用传递的区别。在学习本课程之前需要掌握一定的基础知识。
  • memcpy函数实现

    万次阅读 2018-07-23 12:53:02
    memcpy函数作用: 将由src指向地址为起始...2.与strcpy相比,memcpy遇到‘\0’并不会结束,而是一定会拷贝完n个字节 3.memcpy可以拷贝任何数据类型的对象,可以指定拷贝的数据长度 4.如果dest本身就有数据,执...
  • 如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。3. 接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定...
  • GB28181分析与实现原理

    千人学习 2019-06-05 17:47:07
    本课程是RTSP/ONVIF/GB28181系列教程之一,通过分析GB28181协议信令交互过程,结合GB28181库的接口设计、模块划分、实现思路及GB28181相关重要细节,对GB28181协议作出一定内容讲解(主要包括平台对接、媒体架构设计...
  • 自己实现fmod函数

    万次阅读 2017-05-27 09:57:59
    问题描述:自己实现一个MyFmod函数,和C语言库函数的fmod函数完成同样的功能。问题分析: 首先我们了解一下fmod函数它到底做了什么事情(1) 函数原型 double fmod (double x, double y);(2) 函数说明fmod() ...
  • JAVA实现人脸识别

    万次阅读 2009-08-02 22:40:00
    最近接到一个任务,要求是上传一男一女的照片根据他们的特征...中间会有很多问题 不一定行的通,这样做一定要首先实现人脸定位。直接用JAVA实现人类识别定位的例子在网上很难找到,多是依靠JNI 调用OpenCV本地方法实现
  • Java中 一个类实现了某接口 则必须实现该接口中的所有方法么?...不一定,抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。 比如 public interface A {//定义一个接口  public void 
  • 10分钟实现微信小程序支付功能

    千人学习 2019-08-13 09:33:48
    2,创建完云函数后,一定要记得上传 二, 创建支付的云函数 1,创建云函数pay 三,引入三方依赖tenpay 我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,...
  • python实现单链表反转(经典笔试题)

    万次阅读 多人点赞 2018-07-16 22:40:18
     链表结构,说难不难,说易不易,一定要亲自编程实现一下。其次就是一定要耐心,慢慢去体会其中的道道,博主一开始也是有点懵逼的,后来仔细琢磨了一下终于搞明白了,相信聪明的你也一定可以,有问题可以留言交流。...
  • Qt5软键盘实现中文拼音输入法

    万次阅读 多人点赞 2017-10-31 20:59:38
    基于Qt实现的虚拟键盘实现输入法在网上所有资料看来,几乎都是基于生成的中文汉字数据库实现的方法,不够灵活,不够智能。 拼音输入法的库我们采用的安卓底层... 一定要记住:在有轮子的情况下,我们千万不要自己造轮子

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,092,267
精华内容 1,236,906
关键字:

一定要实现一定能实现