惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
腾讯CDC
博客园_首页
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
有赞技术团队
有赞技术团队
博客园 - 叶小钗

博客园 - changhai-xuri

[转]VS2005快捷键大全 <转载>C#基础面试题 转载(ASP.NET页面之间传递值的几种方式?) 面试的一些体会 程序之路对我来说有多远呢? 晕!我还是没办法改页面顶部的背景图片 关于开发模式的一点点思考 VB和VSS断绝往来了咋办? C#中的代理(Delegate) Spoolsv占用CPU100%的解决方案 Js文件中调用其它Js函数的方法 设计模式之策略模式探讨初步 设计模式之策略模式在设计一群鸭子中的应用 修改一下博客的式样 软件开发模式--软件开发教父与国内高手论道实录全文 微软公司软件开发模式简介 自己写的使用聚集函数实现多行字串合并处理 (转载)使用自定义聚集函数来实现分组合并字符串 关于ORACLE中插入,更新(MERGE)的使用
JAVA中对象的序列化
changhai-xuri · 2006-11-24 · via 博客园 - changhai-xuri

什么是序列化?
JAVA在运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。

序列化的目的:
1
、以某种存储形式使自定义对象持久化;
2
、将对象从一个地方传递到另一个地方。

java中处处体现着简单的程序设计风格,序列化作为最常用的功能之一,在java中的设计尤为简单。通过ObjectInputStream ObjectOutputStream两个类,我们可以很轻松的实现序列化。   只要我们的class 实现了java.io.Serializable接口,就可以利用ObjectOutputStreamwriteObject()方法将一个对象序列化到文件或字符流;同时利用ObjectInputStreamreadObject()方法,就可以从文件或字符流里读出的object对象。Serializable接口不需要我们实现任何方法。   下面是一个比较简单的把对象序列化到文件保存,再从文件反序列化读出并调用的例子。让我们来看一下整个过程:   Staffer实现了java.io.Serializable接口,成为一个可序列化的类。我们首先构造一个Staffer的对象Staffer1然后将其保存(序列化)在一个文件中,而后再将其读出(反序列化),并调用其toString方法打印内容。

package test.code;

import java.io.*;

public class Staffer implements Serializable {
    
int id;

    String addr;

    String name;

    
boolean isOnJob;

    
public Staffer() {
    }


    
public Staffer(int id, String name, String addr, boolean isOnJob) {
        
this.id = id;
        
this.name = name;
        
this.addr = addr;
        
this.isOnJob = isOnJob;
    }


    
/**
     * deserialize
     
*/


    
public static Staffer deserialize(ObjectInputStream objIn) throws Exception {
        Staffer s 
= (Staffer) objIn.readObject();
        
return s;
    }


    
public String toString() {
        
return  "DATA: id       " + this.id +
                
"      name     " + this.name +
                
"      address  " + this.addr + 
                
"      isOnJob  " + this.isOnJob;
    }


    
/**
     * serialize
     
*/


    
public void serialize(ObjectOutputStream oout) throws Exception {
        oout.writeObject(
this);
    }


    
public static void main(String[] args) {
        Staffer staffer1 
= new Staffer(752"linlan",
                
"dayer street #5 building 02-287"false);//构造一个新的对象
        FileInputStream fIn = null;
        FileOutputStream fOut 
= null;
        ObjectInputStream objIn 
= null;
        ObjectOutputStream objOut 
= null;
        String fName 
= "d:\\Staffer.txt";

        
try {
            fOut 
= new FileOutputStream(fName);
            objOut 
= new ObjectOutputStream(fOut);
            staffer1.serialize(objOut);
//序列化
            objOut.close();
            objOut 
= null;
            fIn 
= new FileInputStream("d:\\Staffer.txt");
            objIn 
= new ObjectInputStream(fIn);
            Staffer staffer2 
= Staffer.deserialize(objIn);//反序列化
            System.out.println(staffer2);//打印结果
        }
 catch (Exception ex) {
            ex.printStackTrace();
        }
 finally {
            
try {
                
if (fIn != null{
                    fIn.close();
                }

                
if (objIn != null{
                    objIn.close();
                }

                
if (fOut != null{
                    fOut.close();
                }

                
if (objOut != null{
                    objOut.close();
                }

            }
 catch (IOException ex1) {
                ex1.printStackTrace();
            }

        }

    }


}