implements 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接口的用法和作用了。

原链接:http://blog.csdn.net/ukouryou/article/details/4132443

时间: 2024-10-07 02:40:23

implements Serializable有什么作用的相关文章

implements Serializable有什么作用?

没有implements Serializable,你就不能通过rmi(包括ejb)提供远程调用.serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象. serialization不但可以在本机做,而且可以经由网络操作(就是猫小说的RMI).这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序等.比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台

Java序列化接口Serializable接口的作用总结

转载 http://www.cnblogs.com/DreamDrive/p/4005966.html 一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做"持久化". 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了.(存储到硬盘是一个文件,不需要我们去解析,如果用记事本打开解析会出现乱码,解析要用特定的方式,不用我们管. 我们只需要读取). 把对象存储到硬盘上的一个文件中,这个文件的标准扩展名是(.

Serializable序列化的作用

这里转载一篇讲解java序列化(Serializable)和反序列化方面的感觉很好的文章.1.序列化是干什么的?简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化.2.什么情况下需要序列化a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候:b)当你想用套接字在网络上传送对象的时候:c)当你

对于1个类implements Serializable

Serializable 的意思是“可序列化” 如果有个Class B 而且它没有implements Serializable.启动序列化处理Class B, 系统将会甩出NotSerializableException异常. 当我们想在不同Activity传递自己的类的时候,可以使用这种方法: Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putSerializable("user", user);

Java中的Serializable接口的作用

转载自:http://blog.csdn.net/shehun11/article/details/40300439 所谓的Serializable,就是java提供的通用数据保存和读取的接口.至于从什么地方读出来和保存到哪里去都被隐藏在函数参数的背后了.这样子,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方.也可以用管道来传输到系统的其他程序中.这样子极大的简化了类的设计.只要设计一个保存一个读取功能就能解决上面说得所有问题. Obj

android intent 传数据

1. 基本数据类型 Intent intent = new Intent(); intent.setClass(activity1.this, activity2.class); //描述起点和目标 Bundle bundle = new Bundle(); //创建Bundle对象 bundle.putString("key", "包装的数据"); //装入数据 intent.putExtras(bundle); //把Bundle塞入Intent里面 start

在Android中通过Intent使用Bundle传递对象

IntentBundle传递对象SerializableParcelable Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法.被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable.两种序列化方式的区别:1.在使用内存的时候,Parcelable比Se

serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法

ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Serializable其实是一个空接口 package java.io; public interface Serializable { } Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化. 什么情况下需要序列化 a)当你想把的内存中的对象写入到硬

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

遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,serialVersionUID 这个的值到底是在怎么设置的,有什么用.有的是1L,有的是一长串数字,迷惑ing.我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题. 在处理这个问题之前,你要先知道一个问题,这个比较重要.这个Serializable接口,以及相关的东西,全部都在 J