星空网 > 软件开发 > Java

Java中的对象序列化

好久没翻译simple java了,睡前来一发。译文链接:http://www.programcreek.com/2014/01/java-serialization/

什么是对象序列化

Java中,对象序列化指的是将对象用字节序列的形式表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,并且支持从数据库或文件中反序列化,从而在内存中重建对象;

为什么需要序列化

序列化经常被用于对象的网络传输或本地存储。网络基础设施和硬盘只能识别位和字节信息,而不能识别Java对象。通过序列化能将Java对象转成字节形式,从而在网络上传输或存储在硬盘。

那么为什么我们需要存储或传输对象呢?根据我的编程经验,有如下原因需要将对象序列化(以下原因,我表示没使用过。。。)

  • 一个对象的创建依赖很多上下文环境,一旦被创建,它的方法和属性会被很多其它组件所使用;
  • 一个包含了很多属性的对象创建后,我们并不清楚如何使用这些属性,所以将它们存储到数据库用于后续的数据分析;

顺便也说下,根据我(真正的我)的编程经验,序列化使用情况如下:

  • 网络上的对象传输
  • 使用一些缓存框架的时候,比如ehcache,将对象缓存到硬盘的时候,需要序列化,还有hibernate也会用到;
  • RMI(远程方法调用)

Java序列化例子

以下代码展示了如何让一个类可序列化,对象的序列化以及反序列化;

对象:

package serialization;import java.io.Serializable;public class Dog implements Serializable {  private static final long serialVersionUID = -5742822984616863149L;  private String name;  private String color;  private transient int weight;  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public String getColor() {    return color;  }  public void setColor(String color) {    this.color = color;  }  public int getWeight() {    return weight;  }  public void setWeight(int weight) {    this.weight = weight;  }  public void introduce() {    System.out.println("I have a " + color + " " + name + ".");  }}

main方法

package serialization;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class SerializeDemo {  public static void main(String[] args) {    // create an object    Dog e = new Dog();    e.setName("bulldog");    e.setColor("white");    e.setWeight(5);    // serialize    try {      FileOutputStream fileOut = new FileOutputStream("./dog.ser");      ObjectOutputStream out = new ObjectOutputStream(fileOut);      out.writeObject(e);      out.close();      fileOut.close();      System.out.printf("Serialized dog is saved in ./dog.ser");    } catch (IOException i) {      i.printStackTrace();    }    e = null;    // Deserialize    try {      FileInputStream fileIn = new FileInputStream("./dog.ser");      ObjectInputStream in = new ObjectInputStream(fileIn);      e = (Dog) in.readObject();      in.close();      fileIn.close();    } catch (IOException i) {      i.printStackTrace();      return;    } catch (ClassNotFoundException c) {      System.out.println("Dog class not found");      c.printStackTrace();      return;    }    System.out.println("\nDeserialized Dog ...");    System.out.println("Name: " + e.getName());    System.out.println("Color: " + e.getColor());    System.out.println("Weight: " + e.getWeight());    e.introduce();  }}

结果打印:

Serialized dog is saved in ./dog.ser
Deserialized Dog ...
Name: bulldog
Color: white
Weight: 0
I have a white bulldog.




原标题:Java中的对象序列化

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

如何优化Google广告才能低预算出高效果?:https://www.ikjzd.com/articles/107206
速卖通新手运营:如何进行数据化选品?:https://www.ikjzd.com/articles/107207
中秋节福利!分享亚马逊运营技巧高阶干货!:https://www.ikjzd.com/articles/107209
三大巨头抢占这片蓝海,印度市场有何魔力?:https://www.ikjzd.com/articles/107213
只是发了常规的售后邮件,竟然被限制与买家联系11天!:https://www.ikjzd.com/articles/107219
下一“站”躺赚:亚马逊这个站点2019招商开启啦!:https://www.ikjzd.com/articles/10722
37号文今后是否会更新?一文详解关键信息 :https://www.kjdsnews.com/a/1836441.html
探讨内地人开设香港账户的可行性 :https://www.kjdsnews.com/a/1836442.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流