1、序列化是干什么的?

简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;

b)当你想用套接字在网络上传送对象的时候;

c)当你想通过RMI传输对象的时候;

3、当对一个对象实现序列化时,究竟发生了什么?

在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:

Foo myFoo = new Foo();

myFoo .setWidth(37);

myFoo.setHeight(70);

当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。

FileOutputStream fs = new FileOutputStream("foo.ser");

ObjectOutputStream os = new ObjectOutputStream(fs);

os.writeObject(myFoo);

4、实现序列化(保存到一个文件)的步骤

a)Make a FileOutputStream

java 代码

FileOutputStream fs = new FileOutputStream("foo.ser");

b)Make a ObjectOutputStream

java 代码

ObjectOutputStream os = new ObjectOutputStream(fs);

c)write the object

java 代码

os.writeObject(myObject1);

os.writeObject(myObject2);

os.writeObject(myObject3);

d) close the ObjectOutputStream

java 代码

os.close();

5、举例说明

java 代码

import java.io.*;

public class Box implements Serializable

{

private int width;

private int height;

public void setWidth(int width){

this.width = width;

}

public void setHeight(int height){

this.height = height;

}

public static void main(String[] args){

Box myBox = new Box();

myBox.setWidth(50);

myBox.setHeight(30);

try{

FileOutputStream fs = new FileOutputStream("foo.ser");

ObjectOutputStream os = new ObjectOutputStream(fs);

os.writeObject(myBox);

os.close();

}catch(Exception ex){

ex.printStackTrace();

}

}

}

6、相关注意事项

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

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

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

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

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

取消

评论

java jdk 是什么_java中的jdk是做什么用的?相关推荐

  1. maven pom java版本_Maven更新POM中的JDK版本(比如更新为JDK1.8)

    默认POM如果不指定JDK版本为1.5,而有些项目需要使用泛型这些,就必须使用1.8版本的JDK,所以需要手动修改POM. 打开pom.xml文件修改,增加如下配置节点: [...] [...] or ...

  2. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  3. 32位jdk最大内存_Java安装之JDK下载篇

    学习Java则必须有相应的开发工具包-JDK.JDK全称是Java Development Kit,即Java开发工具包.只有安装了JDK,我们才能将编写的代码进行编译和运行.下面我先介绍一下JDK的 ...

  4. java 异常处理发生异常_Java中的异常处理

    java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...

  5. oracle配置jdk版本号,升级oracle中的JDK版本

    Oracle自8i起就全面支持java,但各个版本的oracle中默认jdk版本均不相同,oracle8i中为jdk1.2,oracle9i中为jdk1.3,oracle10g中为jdk1.4~~至笔 ...

  6. linux卸载jdk权限不够,linux中卸载jdk,一个简单问题整了一下午

    由于重新更改jdk version 1.5 --1.6,卸载时被卡了, rpm -qa|grep jdk -->jdk-1.6.0_22-fcs rpm -qa|grep java --> ...

  7. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  8. java 基本类型 引用_java中 引用类型 和 基本类型 有何区别?

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newa ...

  9. java构造器详解_Java中关于构造器的使用详解

    这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方,需要的朋友可以参考下 Java构造器使用方法及注意事项 超类的构造器在子类的构造器运行之前运行 ...

最新文章

  1. jquery书写一个简易的二级联动
  2. tornado 模板
  3. 是什么能让 APP 快速精准定位到我们的位置?
  4. android com.squareup,android – 无法导入com.squareup.okhttp.OkHttpClient;
  5. leetcode python3 简单题20. Valid Parentheses
  6. asp.net关于上传文件修改文件名的方法
  7. 区块链 - 知识点整理
  8. 【Excel_007】利用excel进行线性规划求解
  9. photoshop 插件_所有设计师必须拥有的20个免费和有用的Photoshop插件
  10. 安卓原生系统_安卓原生系统为什么比MIUI和EMUI等国产系统更流畅
  11. 一个程序员和一个黑客群的故事
  12. 物联网技术栈之网关技术
  13. 什么是hadoop?
  14. 行云管家受邀出席2019云栖大会
  15. 希尔伯特的23个数学问题
  16. java类型转换的例子
  17. GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...
  18. 计算机英语重点,计算机英语复习重点.doc
  19. 游戏机制对IT员工激励的影响
  20. 多道程序设计、多线程和多处理

热门文章

  1. ThreadLocal在多线程中的作用和原理浅析(模拟学生入学报到场景)
  2. 【ECharts系列|03可视化大屏】大数据管理平台实时展示
  3. Python小记 正则
  4. 寻找假币问题(二分法)
  5. 如何用Python搭建一个搜题软件?
  6. 如何排查网络丢包问题
  7. 嵌入式Linux_USB_U盘自动检测识别
  8. 【转载】如何巧用IPD,建立完善的产品研发管理体系?
  9. 压缩算法(二)——QuickLZ算法
  10. 计算机和计算机思维理论考试试题科目一,2020税务师考试答题方式、输入法要求及考试题型!...