通过java套接字传递对象

使用JavaTM远程方法调用(RMI),可以很方便地开发分布式的基于对象的应用程序。RMI的简单性,是由网络通信的费用作为代价的。底层的套接字可以用来开发客户/服务器系统,但是由于大多数Java I/O类和对象不太容易匹配,如何通过套接字传递完成的对象呢?对象序列化是一个允许您以比特流方式读/写完成对象的机制。

将底层的套接字和对象序列化结合在一起,您将得到一个强大的、高效的、可替代RMI的机制,通过套接字来传递对象还能克服使用RMI的高费用的问题。

对象序列化概述

对象序列化机制对于需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态,或者使用套接字在网络上传送对象的程序来说,是很有用的。通过让类实现java.io.Serializable 接口可以将类序列化。这个接口是一个制造者(marker)接口。也就是说,对于要实现它的类来说,该接口不需要实现任何方法。它主要用来通知Java虚拟机(JVM),需要将一个对象序列化。

将对象读出或者写入流的主要类有两个: ObjectOutputStream与ObjectInputStream 。ObjectOutputStream 提供用来将对象写入输出流的writeObject方法, ObjectInputStream提供从输入流中读出对象的readObject方法。注意使用这些方法的对象必须被序列化,这非常重要。也就是说,这些类必须实现Serializable接口。

序列化已经存在的类

了解了对象序列化的基础知识之后,我们来看看如何对流读/写对象或现有的已序列化类实例。要将一个对象写入输出流,先建立一个输出流,然后使用writeObject对象保存到文件中。

--------------------------------------------------------------------------------

注意: Date类是可序列化的。换句话说,它实现 Serializable接口。

--------------------------------------------------------------------------------

例程 1: SaveDate.java

import java.io.*;
import java.util.Date;
public class SaveDate {
  public static void main(String argv[]) throws Exception {
   FileOutputStream fos = new FileOutputStream("date.out");
   ObjectOutputStream oos = new ObjectOutputStream(fos);
   Date date = new Date();
   oos.writeObject(date);
   oos.flush();
   oos.close();
   fos.close();
  }
}
读入对象,然后重新构造它的状态都很容易。例程2中的代码向您展示了如何读一个已经序列化的对象并且打印它的信息。

例程 2: ReadDate.java

import java.io.*;
import java.util.Date;
public class ReadDate {
  public static void main(String argv[]) throws Exception {
   FileInputStream fis = new FileInputStream("date.out");
   ObjectInputStream ois = new ObjectInputStream(fis);
   Date date = (Date) ois.readObject();
   System.out.println("The date is: "+date);
   ois.close();
   fis.close();
  }
}

时间: 2024-08-03 02:43:09

通过java套接字传递对象的相关文章

【网络编程1】Java套接字Socket

这篇博客是本人学习<Java网络程序设计>书中第4章套接字的学习总结.初学者网友学习这篇Java套接字文章,如果难于理解文章前面理论部分,可以先运行后面的程序,边看运行后面的程序边理解前面的原理,这对初学者是最好的方法.所有源代码都在文章后面我的github链接代码中. --惠州学院 13网络工程 吴成兵 20160607 目录 1 目录 1 一 流套接字概述 二 服务器套接字ServerSocket 21 ServerSocket的工程过程 22 ServerSocket构造方法 23 Se

EventSelect套接字链表对象和线程链表对象组合下的事件Select模型

WSAEventSelect模型的是事件句柄数组和套节字句柄数组的方式去实现事件Select模型的 接下来用的是套接字链表对象和线程链表对象组合下的事件Select模型   ///////////////////////////////////////////////////// // EventSelect.h文件 DWORD WINAPI ServerThread(LPVOID lpParam); // 套节字对象 typedef struct _SOCKET_OBJ { SOCKET s;

如何编写简单的配合认证的基于JAVA套接字的通信程序

问题描述 我是一个初学者,现在正在编写一个配合认证的基于JAVA套接字的通信程序.老师要求:终端1和终端2要进行通信,必需通过第三台机器的简单认真.哪位高手帮帮忙吧!

Java套接字编程(上)

用Java开发网络软件非常方便和强大,Java的这种力量来源于他独有的一套强大的用于网络的 API,这些API是一系列的类和接口,均位于包java.net和javax.net中.在这篇文章中我们将介绍套接字(Socket)慨念,同时以实例说明如何使用Network API操纵套接字,在完成本文后,你就可以编写网络低端通讯软件. 什么是套接字(Socket)? Network API是典型的用于基于TCP/IP网络Java程序与其他程序通讯,Network API依靠Socket进行通讯.Sock

Java套接字编程(上)(3)

编程 ServerSocket类 由于SSClient使用了流套接字,所以服务程序也要使用流套接字.这就要创建一个ServerSocket对象,ServerSocket有几个构造函数,最简单的是ServerSocket(int port),当使用ServerSocket(int port)创建一个ServerSocket对象,port参数传递端口号,这个端口就是服务器监听连接请求的端口,如果在这时出现错误将抛出IOException异常对象,否则将创建ServerSocket对象并开始准备接收连

Java套接字编程(下)

自寻址套接字(Datagram Sockets) ,因为使用流套接字的每个连接均要花费一定的时间,要减少这种开销,网络API提供了第二种套接字:自寻址套接字(datagram socket),自寻址使用UDP发送寻址信息(从客户程序到服务程序或从服务程序到客户程序),不同的是可以通过自寻址套接字发送多IP信息包,自寻址信息包含在自寻址包中,此外自寻址包又包含在IP包内,这就将寻址信息长度限制在60000字节内.图2显示了位于IP包内的自寻址包的自寻址信息. 与TCP保证信息到达信息目的地的方式不

Java套接字(Socket)网络编程入门_java

网络应用模式主要有: 主机/终端模式:集中计算,集中管理: 客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理: 浏览器/服务器模式:利用Internet跨平台. www(万维网)就是建立在客户机/服务器模式上,以HTML语言和HTTP协议为基础,能够提供各种Internet服务的信息浏览系统.网络信息放在主机的不同位置,www服务器利用超文本链路链接各项信息.www客户机(浏览器Brower)负责与服务器建立联系,向服务器发送请求,处理HTML超媒体,提供图形用户

Java套接字编程(上)(2)

Socket类 当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数.两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字.对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象

Java套接字编程(下)(1)

自寻址套接字(Datagram Sockets) ,因为使用流套接字的每个连接均要花费一定的时间,要减少这种开销,网络API提供了第二种套接字:自寻址套接字(datagram socket),自寻址使用UDP发送寻址信息(从客户程序到服务程序或从服务程序到客户程序),不同的是可以通过自寻址套接字发送多IP信息包,自寻址信息包含在自寻址包中,此外自寻址包又包含在IP包内,这就将寻址信息长度限制在60000字节内.图2显示了位于IP包内的自寻址包的自寻址信息. 与TCP保证信息到达信息目的地的方式不