`

java中的接口Serializable的作用和例子

阅读更多
作用:
没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用。 
serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。 
serialization不但可以在本机做,而且可以经由网络操作(就是猫小说的RMI)。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。 
Object serialization主要用来支持2种主要的特性: 
1。Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。 
2。Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。 
总之如果在网络的环境下做类传输,应该还是implements Serializable。

例子:
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.net.ServerSocket; 
import java.net.Socket; 
//定义序列化(object)
class Student implements Serializable { 
private int sno; 
private String sname; 

public Student(int sno, String sname) { 
this.sno = sno; 
this.sname = sname; 
} 

public int getSno() { 
return sno; 
} 

public void setSno(int sno) { 
this.sno = sno; 
} 

public String getSname() { 
return sname; 
} 

public void setSname(String sname) { 
this.sname = sname; 
} 

@Override 
public String toString() { 
return "学号:" + sno + ";姓名:" + sname; 
} 

} 
//(object)的反序列化过程
class MyClient extends Thread { 
@Override 
public void run() { 
try { 
Socket s = new Socket("localhost", 9999); 
ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); 
Student stu = (Student) ois.readObject(); 
System.out.println("客户端程序收到服务器端程序传输过来的学生对象>> " + stu); 
ois.close(); 
s.close(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (ClassNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 
} 
//(object)的序列化过程
class MyServer extends Thread { 

@Override 
public void run() { 
try { 
ServerSocket ss = new ServerSocket(9999); 
Socket s = ss.accept(); 
ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream()); 
Student stu = new Student(1, "赵本山"); 
ops.writeObject(stu); 
ops.close(); 
s.close(); 
ss.close(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 

} 
//测试
public class TestTransfer { 
public static void main(String[] args) { 
new MyServer().start(); 
new MyClient().start(); 
} 
}

参照这个例子就会很好的理解Serializable接口的用法和作用了。
版权声明:本文为博主原创文章,未经博主允许不得转载。

 

分享到:
评论

相关推荐

    Java 对象序列化详解以及实例实现和源码下载

    Java中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何...

    深入探索Java对象的序列化

    Serializable有一个子接口Externalizable,实现Externalizable接口的类可以自行控制对象序列化荷反序列化过程。 一般来说,没有必要自己实现序列化接口,直接交给Java虚拟机是上策。 实现了序列化接口的类,如果...

    J2SE中的序列化的认识

    java中处处体现着简单的程序设计风格,序列化作为最常用的功能之一,在java中的设计尤为“简单”。在ObjectInputStream 和ObjectOutputStream的帮助下,我们可以轻松的实现序列化。 只要我们的class 实现了java.io....

    java-servlet-api.doc

    所有的JavaServlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。Servlet引擎是Web服务器按照JavaServletAPI定制的扩展。Servlet引擎提供网络服务,能够理解MIME请求,并...

    Hibernate注释大全收藏

    java.sql.Blob, Byte[], byte[] 和 serializable type 将被持久化为 Blob 类型。 @Lob public String getFullText() { return fullText; // clob type } @Lob public byte[] getFullCode() { return fullCode;...

    源码:阎宏设计模式光盘

    com.javapatterns.interfaces Java接口 com.javapatterns.interpreter 解释器模式 com.javapatterns.isp 接口隔离原则 com.javapatterns.iterator 迭代子模式 com.javapatterns.javaio 专题:设计模式在Java I/O...

    memcached1

    对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须...

    c#学习笔记——学习心得

    名称空间:类似java中的包 集合: 代表: 访问修饰符:private、public、protected、internal:局部的 readonly:只读修饰符 new(新的)、static(静态的)、virtual(虚拟的)、override()、sealed(密封的)、abstranct...

    Hibernate中文API大全

    它必须实现java.io.Serializable接口 它必须重新实现equals()和hashCode()方法, 始终和组合关键字在数据库中的概念保持一致 注意:在Hibernate3中,第二个要求并非是Hibernate强制必须的。但最好这样做。 你不...

    ssh(structs,spring,hibernate)框架中的上传下载

    将FileActionForm直接作为业务层的接口入参,相当于将Web层传播到业务层中去,即将业务层绑定在特定的Web层实现技术中,按照分层模型学院派的观点,这是一种反模块化的设计,但在"一般"的业务系统并无需提供多种UI...

    net学习笔记及其他代码应用

    protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString,...

Global site tag (gtag.js) - Google Analytics