Serializable java序列化介绍

java为什么要实现序列化(Serializable) 1、简介 对于 Java 的序列化,我一直停留在最浅显的认知上——把那个要序列化的类实现 Serializbale 接口就可以了。我不愿意做更深入的研究,因为会用就行了嘛。但随着时间的推移,见到 Serializbale 的次数越来越多,我便对它产生了浓厚的兴趣。是时候花点时间研究研究了。 2、理论 Java 序列化是 JDK 1.1 时引入的一组开创性的特性,用于将 Java 对象转换为字... 阅读详情

Bean Serializable Interface 的接口让BEAN可以串行化,将其变成一个可保存为以后使用的二进制流。当一个BEAN被系列化到磁盘上或者其他任何地方,其状态被保存起来,其中的属性 值也不会改变。在BEAN的规范中,JSP并没有要求BEAN实现Serializable接口。但是,如果您希望自己控制您所创建的组件的 serialization进程,或者您想serialize并不是标准组件扩展的组件,您必须了解serialization and deserialization的细节。

  有几个原因你会把BEAN冷藏起来以备后用。有些服务器通过将所有的SESSION 数据(包括BEAN)写入磁盘来支持任意长的SESSION生命期,即使服务器停机也不会丢失。当服务器重新启动后,串行化的数据被恢复。同样的理由,在 重负载的站点上支持服务器分簇的环境中,许多服务器通过串行化来复制SESSION。如果你的BEAN不支持串行化,服务器就不能正确地保存和传输类。

  通过同样的策略,你可以选择将BEAN保存在磁盘上或者数据库中,以备后用。例如,也许可以将客户的购物车实现为一个BEAN,在访问期间将其保存在数据库中。

  如果BEAN需要特殊的复杂的初始设置,可以将BEAN设置好后串行化保存在磁盘上。这个BEAN的“快照”可以用在任何需要的地方,包括在$#@60;jsp:useBean$#@62;中用beanName属性的调用。

   $#@60;jsp:useBean$#@62;标签中的beanName属性,用来实例化一个串行化的BEAN,而不是用来从一个类创建一个全新的实 例。如果BEAN还没有创建,beanName属性传给java.beans.Bean.instantiate()方法,由类装载器对类进行实例化。它 首先假定存在一个串行化的BEAN(带有扩展名.ser),然后会将其激活。如果这个操作失败,它就会实例化一个新的实例。




  下面简单介绍一下这个接口 :

   对象能包含其它的对象,而这其它的对象又可以包含另外的对象。JAVA serialization能够自动的处理嵌套的对象。对于一个对象的简单的域,writeObject()直接将值写入流。而,当遇到一个对象域 时,writeObject()被再次调用,如果这个对象内嵌另一个对象,那么,writeObject() 又被调用,直到对象能被直接写入流为止。程序员所需要做的是将对象传入ObjectOutputStream 的writeObject() 方法,剩下的将又系统自动完成。下面的例子创建了一个调用mine对象的PersonalData对象。代码实现的是将一个串和mine 对象输出到一个流,并存入一个文件:

public class PersonalData implements Serializable {
public int id
public int yearOfBirth;
public float yearlySalary;
}
PersonalData mine = new PersonalData(101, 1956, 46500.00);
FileOutputStream outstream = new FileOutputStream("PersonalData.ser");
ObjectOutputStream out = new ObjectOutputStream(outstream);
out.writeObject("My personal data"); //将一个串写入流
out.writeObject(mine); //将这个对象写入流
out.close(); // 清空并关闭流
...

   一个FileOutputStream对象被创建且传到一个ObjectOutputStream。当out.writeObject() 被调用,这个串和mine 对象被objects are serializ顺序加入一个存入文件PersonalData.ser的字节对列。

   您应该注意上述类是实现的java.io.Serializable接口。因为它并未指定要实现的方法,所以Serializable被称 为"tagging interface" ,但是它仅仅"tags"它自己的对象是一个特殊的类型。任一个您希望serialize的对象都应该实现这个接口。这是必须的。否则,用到流技术时将根 本不工作。例如,如果您试着去serialize 一个没有实现这个接口的对象,一个 NotSerializableException将产生。

类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

  Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。

  要想序列化对象,你必须先创建一个OutputStream,然后把它嵌进ObjectOutputStream。这时,你就能用writeObject( )方法把对象写入OutputStream了。

   writeObject 方法负责写入特定类的对象的状态,以便相应的 readObject 方法可以还原它。通过调用 out.defaultWriteObject 可以调用保存 Object 的字段的默认机制。该方法本身不需要涉及属于其超类或子类的状态。状态是通过使用 writeObject 方法或使用 DataOutput 支持的用于基本数据类型的方法将各个字段写入 ObjectOutputStream 来保存的。

  读的时候,你得把InputStream嵌到ObjectInputStream里面,然后再调用readObject( )方法。不过这样读出来的,只是一个Object的reference,因此在用之前,还得先下传。readObject 方法负责从流中读取并还原类字段。它可以调用 in.defaultReadObject 来调用默认机制,以还原对象的非静态和非瞬态字段。

    defaultReadObject 方法使用流中的信息来分配流中通过当前对象中相应命名字段保存的对象的字段。这用于处理类发展后需要添加新字段的情形。该方法本身不需要涉及属于其超类或 子类的状态。状态是通过使用 writeObject 方法或使用 DataOutput 支持的用于基本数据类型的方法将各个字段写入 ObjectOutputStream 来保存的。

  看一个列子:

import  java.io. * ; 

class  tree  implements  java.io.Serializable  { 
    
public  tree left; 
    
public  tree right; 
    
public   int  id; 
    
public   int  level; 

    
private   static   int  count  =   0 ; 

    
public  tree( int  depth)  { 
        id 
=  count ++ ; 
        level 
=  depth; 
        
if  (depth  >   0 )  { 
            left 
=   new  tree(depth - 1 ); 
            right 
=   new  tree(depth - 1 ); 
        }
 
    }
 

    
public   void  print( int  levels)  { 
        
for  ( int  i  =   0 ; i  <  level; i ++ ) 
            System.out.print(
"    " ); 
        System.out.println(
" node  "   +  id); 

        
if  (level  <=  levels  &&  left  !=   null ) 
            left.print(levels); 

        
if  (level  <=  levels  &&  right  !=   null ) 
            right.print(levels); 
    }
 


    
public   static   void  main (String argv[])  { 

        
try   { 
            
/*  创建一个文件写入序列化树。  */  
            FileOutputStream ostream 
=   new  FileOutputStream( " tree.tmp " ); 
            
/*  创建输出流  */  
            ObjectOutputStream p 
=   new  ObjectOutputStream(ostream); 

            
/*  创建一个二层的树。  */  
            tree base 
=   new  tree( 2 ); 

            p.writeObject(base); 
//  将树写入流中。 
            p.writeObject( " LiLy is 惠止南国 " );
            p.flush(); 
            ostream.close();    
//  关闭文件。 

            
/*  打开文件并设置成从中读取对象。  */  
            FileInputStream istream 
=   new  FileInputStream( " tree.tmp " ); 
            ObjectInputStream q 
=   new  ObjectInputStream(istream); 

            
/*  读取树对象,以及所有子树  */  
            tree new_tree 
=  (tree)q.readObject(); 

            new_tree.print(
2 );   //  打印出树形结构的最上面 2级 
            String name  =  (String)q.readObject();
            System.out.println(
" /n " + name);
        }
  catch  (Exception ex)  { 
            ex.printStackTrace(); 
        }
 
    }
 
}
 

  最后结果如下:

    node 0
  node 1
node 2
node 3
  node 4
node 5
node 6

LiLy is 惠止南国

  可以看到,在序列化的时候,writeObject与readObject之间的先后顺序。readObject将最先write的object read出来。用数据结构的术语来讲就姑且称之为先进先出吧!

  在序列化时,有几点要注意的:
  1:当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量。
  2:如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存。
  3:如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引用标记为transient,那么对象仍然可以序列化

  还有我们对某个对象进行序列化时候,往往对整个对象全部序列化了,比如说类里有些数据比较敏感,不希望序列化,一个方法可以用transient来标识,另一个方法我们可以在类里重写

private   void  readObject(java.io.ObjectInputStream stream)
     
throws
 IOException, ClassNotFoundException;
 
private   void
 writeObject(java.io.ObjectOutputStream stream)
     
throws
 IOException

  这二个方法!
  示例:

import  java.io. * ;

class  ObjectSerialTest
{
    
public   static   void  main(String[] args)  throws  Exception
    
{
        Employee e1
= new  Employee( " zhangsan " , 25 , 3000.50 );
        Employee e2
= new  Employee( " lisi " , 24 , 3200.40 );
        Employee e3
= new  Employee( " wangwu " , 27 , 3800.55 );
        
        FileOutputStream fos
= new  FileOutputStream( " employee.txt " );
        ObjectOutputStream oos
= new  ObjectOutputStream(fos);
        oos.writeObject(e1);
        oos.writeObject(e2);
        oos.writeObject(e3);
        oos.close();
        
        FileInputStream fis
= new  FileInputStream( " employee.txt " );
        ObjectInputStream ois
= new  ObjectInputStream(fis);
        Employee e;
        
for ( int  i = 0 ;i < 3 ;i ++ )
        
{
            e
= (Employee)ois.readObject();
            System.out.println(e.name
+ " : " + e.age + " : " + e.salary);
        }

        ois.close();
    }

}


class  Employee  implements  Serializable
{
    String name;
    
int  age;
    
double  salary;
    
transient  Thread t = new  Thread();
    
public  Employee(String name, int  age, double  salary)
    
{
        
this .name = name;
        
this .age = age;
        
this .salary = salary;
    }

    
private   void  writeObject(java.io.ObjectOutputStream oos)  throws  IOException
    
{
        oos.writeInt(age);
        oos.writeUTF(name);
        System.out.println(
" Write Object " );
    }

    
private   void  readObject(java.io.ObjectInputStream ois)  throws  IOException
    
{
        age
= ois.readInt();
        name
= ois.readUTF();
        System.out.println(
" Read Object " );
    }


}

  --(add on 2006/6/28)

参考资料:JDK1.5 API DOC  孙鑫老师资料   

1、实现Serializable回导致发布的API难以更改,并且使得package-private和private
这两个本来封装的较好的咚咚也不能得到保障了
2、Serializable会为每个类生成一个序列号,生成依据是类名、类实现的接口名、
public和protected方法,所以只要你一不小心改了一个已经publish的API,并且没有自
己定义一个long类型的叫做serialVersionUID的field,哪怕只是添加一个getXX,就会
让你读原来的序列化到文件中的东西读不出来(不知道为什么要把方法名算进去?)
3、不用构造函数用Serializable就可以构造对象,看起来不大合理,这被称为
extralinguistic mechanism,所以当实现Serializable时应该注意维持构造函数中所维
持的那些不变状态
4、增加了发布新版本的类时的测试负担
5、1.4版本后,JavaBeans的持久化采用基于XML的机制,不再需要Serializable
6、设计用来被继承的类时,尽量不实现Serializable,用来被继承的interface也不要
继承Serializable。但是如果父类不实现Serializable接口,子类很难实现它,特别是
对于父类没有可以访问的不含参数的构造函数的时候。所以,一旦你决定不实现
Serializable接口并且类被用来继承的时候记得提供一个无参数的构造函数
7、内部类还是不要实现Serializable好了,除非是static的,(偶也觉得内部类不适合
用来干这类活的)
8 、使用一个自定义的序列化方法
  看看下面这个保存一个双向链表的例子:



public class StringList implements Serializable
{
?private int size = 0;
?private Entry head = null;
?
?private static class Entry implements Serializable
?{
? String data;
? Entry next;
? Entry previous;
?}
?...//Remainder ommitted
}





这样会导致链表的每个元素以及元素之间的关系(双向链表之间的连接)
都保存下来,更好的方法是提供一个自定义的序列化如下:

//String List with a resonable custom serialized form
class StringList implements Serializable
{
? private transient int size = 0;?????? //!transient
? private transient Entry head = null ;? //!transient
?
? //no longer serializable!
? private static class Entry
? {
??? String data;
??? Entry next;
??? Entry previous;
? }
?
? //Appends the specified string to the list
? public void add(String s) {/*...*/};
?
? /**
?? * Serialize this StringList instance
?? * @author yuchifang
?? * @serialData The size of the list (the number of strings
   * it contains) is emitted(int), in the proper sequence
?? */
? private void writeObject(ObjectOutputStream s)
               throws IOException
? {
??? s.defaultWriteObject();
??? s.writeInt(size);
??? //Write out all elements in the proper order
??? for (Entry e = head; e != null; e = e.next)
????? s.writeObject(e.data);
? }
?
? private void readObject(ObjectInputStream s)
               throws IOException, ClassNotFoundException
? {
??? int numElements = s.readInt();
???
??? //Read in all elements andd insert them in list
??? for (int i = 0; i < numElements; i++)
????? add((String)s.readObject());
? }
? //...remainder omitted
}


9、 不管你选择什么序列化形式,声明一个显式的UID:

private static final long serialVersionUID = randomLongValue;

10 、不需要序列化的东西使用transient注掉它吧,别什么都留着

11 、writeObject/readObject重载以完成更好的序列化

readResolve 与 writeReplace重载以完成更好的维护invariant controllers

MarshalByRefObject和Serializable

最近在看web sevice 方面的东西,顺便看了下序列化,懂了不少啊 :

从MarshalByRefObject派生的类和有[Serializable]的类都可以跨越应用程序域作为参数传递。
从MarshalByRefObject派生的类按引用封送,有[Serializable]标志的类,按值封送。
如果此类即从MarshalByRefObject派生,也有[Serializable]标志也是按引用封送。

序列化有3种情况:

  1. 序列化为XML格式:
    在webservice里,写个web method,传个自定义类做参数,就是这种情况。系统会帮你搞定,把自定义的类转换为默认XML格式。
  2. 序列化为2进制:
    要加[Serializable]标志,可以把私有变量和公共变量都序列化。
  3. 序列化为soap格式:
    需要实现ISerializable接口,定义序列化函数ISerializable.GetObjectData,和还原序列化的构造函数。
    一个soap参数类的sample:
[Serializable]
    
public   class  serialze:ISerializable 
    
{
        
//  序列化函数,由 SoapFormatter 在序列化过程中调用
         void  ISerializable.GetObjectData(SerializationInfo info, StreamingContext
            ctxt)
        
{
            
//  向 SerializationInfo 对象中添加每个字段
            info.AddValue( " UserName " , UserName);
            info.AddValue(
" UserID " ,UserID);
        }


        
//  还原序列化构造函数,由 SoapFormatter 在还原序列化过程中调用
         public  serialze(SerializationInfo info, StreamingContext ctxt)
        
{
            
//  从 SerializationInfo 对象中还原序列化出各个字段
            UserName  =  ( string )info.GetValue( " UserName " ,  typeof ( string ));
            UserID 
=  ( int ) info.GetValue( " UserID " , typeof ( int ));
        }

  
        
public  serialze()
        
{}

        
public   string  UserName;
        
public   int  UserID;
    }

是的,如果Session要存到数据库中就必须添加Serializable标记~

带你了解Java的序列化(Serializable)与反序列化 其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。 阅读详情

相关推荐

java中的serializable接口作用

我们在用 Java 编程时,那些我们绕不开的 interface;从最基本的 Serializable 到 Comparable 和 Iterator 这些,再到 Java 为了支持函数式编程而提供的 Function、Predicate 等 interface。这些 Java 内置提供的 interface 或多或少我们在写 Java 代码的时候都见过,有的甚至是潜移默化地在日常编码中已经实现过其中的一些 interface,只不过我们没有察觉到罢了。相信通过阅读着几篇文章,一定会让你在写 Java 代码

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 1512

@SerializedName注解的使用

那么我在第一版map的时候为了偷懒,就在java代码中搞了和金蝶一模一样的命名,就为了map上,但是缺忽略了这种不规范的命名方式上sonar肯定是各种爆红的,领导也说了,金蝶可以不规范,但我们一定要规范。@SerializedName注解提供了两个属性,上面用到了其中一个'value',别外还有一个属性'alternate':接收一个String数组。最近遇到了一个很傻的问题,我们公司的项目遇到了一个需要对接金蝶接口的需求,谁曾想金蝶接口的返回值命名一塌糊涂,各种大小写不规范,各种魔法数字命名。

Oliver_Liuqifan的博客 2333

快速了解Spyder

一 面板介绍菜单栏:放置所有功能工具栏:放置快捷菜单,可以通过菜单栏中的View的Toolbars的复选框来勾选工作区:写代码的地方属性页的标题栏:可以显示当前代码的名字和位置查看栏:查看文件、调试时的对象及变量输出栏:查看程序的输出信息,也可以作为shell终端来输入Python语句状态栏:用来显示当前文件权限、编码,光标指向位置和系统内存二 注释功能注释功能为编写代码很常用功能,下面介绍Spy...

实践求真知 1万+

Serializser 序列化的 字段与选项

1. 定义Serializer类 Django REST framework 中的 Serializer 使用类来定义,须继承自 rest_framework.serializers.Serializer。 例如,我们已有了一个数据库模型类BookInfo class BookInfo(models.Model): name = models.CharField(max_length=2...

H_sen's Blog 710

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】

三个因子挖掘思路

GJ57017_wx的博客 1245

FRM(Financial Risk Manager,金融风险管理师)知识点总结归纳

FRM知识点总结(150字) FRM考试分为两级:一级侧重基础理论和工具,包含风险管理基础、定量分析、金融市场产品、估值与风险建模四大模块,涵盖风险管理框架、统计学方法、衍生品定价及VaR计算等核心内容。二级聚焦实际应用,分为市场风险、信用风险、操作风险、流动性风险、投资管理和市场前沿六大模块,深入探讨高级风险度量技术(如极值理论)、信用风险模型、巴塞尔协议及新兴风险议题。考试体系贯穿"风险识别→度量→管理→监管"逻辑主线,强调定量分析与实务案例的结合,覆盖传统金融风险和区块链、ESG等

极客神殿 1440

java序列化总结 Serializable接口,serialVersionUID

1.什么是序列化机制 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。 2.对象流 ObjectInputStream 和 ObjectOutputStream 作用:用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可...

ratel的博客 1065

新能源知识库(62)组串式、集中式和高压直挂式

因需多台PCS及独立监控设备,单位功率成本比集中式高15%–20%。高压直挂式因省去变压器,大容量项目成本更低(>5MW时优势显著)。组串式储能、集中式储能和高压直挂式储能是当前主流的三类技术路线,其核心差异源于系统架构和控制逻辑的设计差异。组串式交流侧需变压器升压至10kV/35kV,高压直挂式可直接输出6kV/35kV电压,减少转换损耗。多台小功率PCS并联(每簇独立管理)单台大功率PCS(多簇直流侧并联)环流导致容量衰减(损失5%–8%)无变压器损耗(效率>99%)高压直挂电站(≥10MW)

竹君子之家 1514

Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释

遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化 b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。 我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。 在处理这个...

请叫我大师兄 13万+

倍福TC3 PLC高速采集实战:如何用PLC-Recorder实现0.24ms级时间戳同步

本文详细介绍了倍福TC3 PLC与PLC-Recorder实现0.24ms级时间戳同步的工程实践方案。通过硬件拓扑设计、时间源选择优化、报文结构封装及同步验证方法,为工业自动化领域的高精度数据采集提供了可靠解决方案,特别适用于精密装配、激光切割等微秒级同步要求的场景。

weixin_29193359的博客 371

华为OD机试2025A卷 - BOSS的收入(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - BOSS的收入(Jav一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销。规定,每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级。现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。输入:分销关系和收入:[[分销id 上级分销id 收入], [分销id 上级分销id 收入], [分销id 上级分销id 收入]]输出:[boss的ID, 总收入]

算法大师! 1171

Serializable java序列化

Bean Serializable Interface 的接口让BEAN可以串行化,将其变成一个可保存为以后使用的二进制流。当一个BEAN被系列化到磁盘上或者其他任何地方,其状态被保存起来,其中的属性值也不会改变。在BEAN的规范中,JSP并没有要求BEAN实现Serializable接口。但是,如果您希望自己控制您所创建的组件的serialization进程,或者您想serialize并不是标准

it_man的专栏 6万+

【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1054

Java 的序列化Serializable接口介绍及应用

常看到类中有一串很长的 如 private static final long serialVersionUID = -4667619549931154146L;的数字声明。这些其实是对此类进行序列化的,那为何要进行序列化呢?下面参照网络及jdk说明,进行学习一下:理解:serialVersionUID 用来表明类的不同版本间的兼容性简单的说,Java的序列化是通过在运行时判断类的ser...

a5206727的博客 172

Android oom_adj 更新原理(一)

通过之前的两篇博文《lmkd 机制详解》和《lmkd中adj score的算法剖析》中,根据计算出来的 min_score_adj 选择大于该值的 oom_adj 的进程进行 kill 处理。oom_adj 随着应用状态的不同其值也是伴随着变化的。本文将通过源码剖析 oom_adj 更新的原理。

私房菜 2652

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java 序列化Serializable接口介绍

Java中的序列化是指将对象转换为字节序列,以便在网络上传输或者保存到文件系统中。反序列化则是将字节序列重新转换为对象。Java提供了内置的序列化机制,使得开发人员可以轻松地实现对象的序列化和反序列化。

qq_27390023的博客 352

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

实体类为什么要实现Serializable序列化的作用

客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源。 web服务器通常将那些暂时不活动但未超时的HttpSession对象转移...

Hello World 2249

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

浅谈一下Java的Serializable 接口(序列化与反序列化)

所以Serializable 接口就相当于序列化的**钥匙**!打开序列化的大门!!!!

qq_44865310的博客 2339

Java 序列化和反序列化(一)Serializable 使用场景

https://www.cnblogs.com/binarylei/p/10987540.html#%E5%BA%8F%E5%88%97%E5%8C%96%E5%AD%98%E5%82%A8%E8%A7%84%E5%88%99 Java 序列化和反序列化(一)Serializable 使用场景 1. 最简单的使用:Serializable 接口 2. 序列化 ID 的问题 3. ...

u013815832的博客 4661

java基础---->Serializable的使用

Serializable序列化的简要说明 一、 持久化的简单介绍: “持久化”意味着对象的“生存时间”并不取决于程序是否正在执行——它存在或“生存”于程序的每一次调用之间。通过序列化一个对象,将其写入磁盘,以后在程序再次调用时重新恢复那个对象,就能圆满实现一种“持久”效果。 二、 语言里增加了对象序列化的概念后,可提供对两种主要特性的支持: 远程方法调用(RMI)使本来存在于其他机器的对象可以表现出好象就在本地机器上的行为。将消息发给远程对象时,需要通过对象序列化来传输参数和返回值。 使用一个Java Be

xiaochengxuyuan1的博客 1176

Java 中那些绕不开的内置接口 -- Serializable

今天给大家梳理了 Java Serializable 接口的一些必须要了解的知识,Serializable 接口在我们用 Java 编程的时候经常见,但是很多人并不了解它的作用,因为它的主要作用还是用于标记类是否是可序列化类,这样 Java 的 ObjectOutputStream 和 ObjectInputStream 才能对类的对象进行序列化和反序列化。

weixin_74412978的博客 809

序列化--Serializable与Parcelable

前言:序列化:就是将对象的状态信息转换为可以存储或传输的形式的过程在我们平时开发中.我们用到序列化最多的地方就是通过intent传递对象,如果你要在intent中传递基本数据类型以外的对象,那么该对象必须实现Serializable或者Parcelable,否则会报错注意: 1:通过intent传递过去的对象是经过了序列化与反序列化的,虽然传送的对象和接收的对象内容相同,但是是不同的对象,他们的引用

夏雨 8319

29 - Java Serializable 序列化

Java Serializable 序列化

阿垂的博客 1301

Java筑基——Serializable序列化接口

本文会通过简单的例子介绍如何对实现了 `Serializable` 接口的类进行序列化和反序列化,这部分是使用 `Serializable` 的入门;接着会重点分析序列化步骤与反序列化步骤,这部分会分析源码,加深对原理的理解;最后会列举实际开发中使用 `Serializable` 接口会遇到的问题并一一进行解决,这部分对开发中会遇到的问题进行填坑。

willwaywang6 2033

java序列化实现Serializable接口

java 序列化 ###java 序列化为什么要实现Serializable接口 ####什么是java序列化 1.java序列化是将对象写入字节流,将对象换成字节的表现形式 ####java实现序列化的意义 1.序列化之后的java对象,可以以字节流形式用于数据持久化操作,以及网络传输。 并且基于jvm平台的存在,序列化之后的字节流可以移植,独立存在运行。 java Serializable接口...

qq_35434814的博客 614

java序列化接口Serializable

类的可序列化性通过实现(implements) java.io.Serializable可序列化接口。 没有实现这个接口的类不会将其任何状态序列化或反序列化。 可序列化类的所有子类型本身可序列化。 序列化接口没有方法或字段只用于识别可序列化的语义。 为了允许序列化不可序列化类的子类型,子类型可以承担保存和还原父类型的公开状态(public),受保护状态(protected)和(如果可以访问)包字段。 只有在以下情况下,子类型才能承担此责任:扩展的类具有可访问的无参(no-arg)构造函数,用于初始化类的状

蜗牛学习笔记 3607
上一篇: Hibernate HQL 语法详解
下一篇: 系统测试报告模板
Java2King
博客等级 码龄18年 221粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值