`

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 序列化对象 serializable 读写数据的实例

    以下是一个使用`Serializable`接口进行对象序列化和反序列化的实例: 首先,我们定义了一个名为`Student`的类,它实现了`Serializable`接口。这个类包含了学生的姓名、ID、年龄以及一个学生列表的属性: ```java ...

    轉Serializable至Stream

    总的来说,将`Serializable`对象转化为`Stream`涉及对象的序列化和流的使用,这对于在网络上传输对象或者在服务器端与客户端之间共享数据是非常有用的。注意,序列化和反序列化可能会涉及安全风险,比如序列化攻击,...

    Intent传递对象Serializable

    以上就是使用Serializable接口在Intent中传递对象的基本操作和注意事项。在实际开发中,根据项目需求和性能要求,选择合适的对象传递方式是非常重要的。在提供的Android_project_Serializable项目中,你可以找到相关...

    bundle传递基本数据,Parcelable类型数据,Serializable类型数据

    尽管Serializable使用方便,但其序列化和反序列化的效率较低,且会产生额外的运行时开销,因此在数据量较大或对性能要求较高的情况下,推荐使用Parcelable。 ### 四、注意事项 1. 当传递Parcelable对象时,确保...

    Laravel开发-serializable-values

    当数据被反序列化时,Laravel会恢复模型实例,而不是简单的字符串。 Luminark的"serializable-values"包则进一步扩展了这一功能,提供了一种更加灵活和安全的方式来处理可序列化的值。这个包可能包含了自定义的序列...

    Serializable在C#中的作用.NET 中的对象序列化

    ### C#中Serializable的作用与对象序列化详解 #### 一、引言 在现代软件开发中,特别是基于.NET框架的应用程序开发中,对象序列化是一项非常重要的技术。它允许将对象的状态转换为一种持久的形式(如文件或网络传输...

    C#中Serializable序列化实例详解

    例如,你可以创建一个`BinaryFormatter`实例,然后使用`Serialize`方法将对象写入`FileStream`,在需要时使用`Deserialize`方法读取并恢复对象。 2. **XML序列化** XML序列化只序列化类的公共属性和字段,且不...

    Java_Serializable(序列化)的理解和总结

    ### Java Serializable(序列化)的理解和总结 #### 一、序列化的定义与目的 序列化是一种将对象的状态转换为可以存储或传输的形式的过程。在Java中,如果一个类实现了`Serializable`接口,那么该类的对象就可以被...

    [Serializable]在C_中的作用-NET_中的对象序列化

    默认情况下,[Serializable]特性的类会使用二进制序列化,但如果需要控制序列化过程或生成XML格式,可以使用XmlSerializer。 在处理对象图表时,序列化系统会自动跟踪和处理对象间的引用,确保对象不会被多次序列化...

    析Android中的Serializable序列化.rar_Serializable _android

    本文将深入探讨Android中的Serializable序列化机制,包括其原理、使用场景以及注意事项。 一、Serializable接口概述 Serializable接口是Java提供的一种序列化机制,它允许对象的状态被转换成字节流,以便于存储或者...

    android Activity之间数据传递 Parcelable和Serializable接口的使用

    android Activity之间数据传递 Parcelable和Serializable接口的使用的具体实例代码,详情请看>http://blog.csdn.net/js931178805/article/details/8268144

    java序列化(Serializable)的作用和反序列化

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...

    java序列化(Serializable)的作用和反序列化.doc

    3. **写入对象**:接下来,使用`ObjectOutputStream`对象的`writeObject`方法将对象写入到输出流中。 ```java os.writeObject(myObject); ``` 4. **关闭输出流**:最后,记得关闭输出流以释放资源。 ```java os...

    java serializable 序列化与反序列化

    当一个类实现了这个接口,它的实例就可以被序列化。 **一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换为可以存储或传输的数据格式的过程。在Java中,通常是将对象转换为字节...

    Java Serializable和Parcelable详解及实例代码

    本篇将详细讲解两种常见的序列化方式:Serializable和Parcelable,并通过实例代码来加深理解。 1. **Serializable接口** `Serializable` 是Java标准库提供的一种简单的序列化方式,位于`java.io`包下。任何实现了`...

    java枚举实例代码

    虽然枚举不能作为其他类的父类,但它们默认继承了 `java.lang.Enum` 类,这意味着枚举实例可以使用 `Comparable` 和 `Serializable` 接口的方法。 此外,枚举可以实现接口,这使得它们可以具有自定义的行为。例如:...

    android各种页面跳转实例

    12. **Parcelable和Serializable**: 当需要在Intent中传递复杂数据时,可以使用Parcelable或Serializable接口。Parcelable效率更高,但实现略复杂;Serializable则简单易用,但序列化和反序列化速度较慢。 通过以上...

Global site tag (gtag.js) - Google Analytics