亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

通過套接字傳遞對象

2019-11-18 12:03:24
字體:
來源:轉載
供稿:網友

  使用javaTM遠程方法調用(RMI),可以很方便地開發分布式的基于對象的應用程序。RMI的簡單性,是由網絡通信的費用作為代價的。底層的套接字可以用來開發客戶/服務器系統,但是由于大多數Java I/O類和對象不太輕易匹配,如何通過套接字傳遞完成的對象呢?對象序列化是一個答應您以比特流方式讀/寫完成對象的機制。
  
  將底層的套接字和對象序列化結合在一起,您將得到一個強大的、高效的、可替代RMI的機制,通過套接字來傳遞對象還能克服使用RMI的高費用的問題。
  
  本文:
  簡單概述對象序列化
  介紹如何應用對象序列化
  解釋如何應用已經存在的對象與用戶對象
  介紹如何通過套接字傳遞對象
  提供多線程的服務器例子
  提供一個基于對象的實現daytime協議的例子
  最后,簡單比較了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.  ois.close();
  fis.close();
  }
  }
  
  在上面的例子中我們使用了Date類的一個實例,這是一個現成的已序列化的Java類。也許您會問這樣的問題:是不是所有現成的Java類都是可序列化的?答案是否定的。這不僅因為這樣做沒必要,而且將某些類序列化是毫無意義的。使用JDK中的serialver工具,可以判定一個類是不是可序列化的。您可以在命令行模式下使用如下命令:
  
  c:/> serialver java.util.Date
  java.util.Date: static final long serialVersionUID = 7523967970034938905L;
  
  (這個例子測試Date類是不是可序列化。輸出結果表示Date類是可序列化的,并且打印出了這個類的版本唯一標識符。)
  
  或者,您也可以使用如下命令啟動圖形界面下的serialver工具:
  
  c:/> serialver -show
  
  這個命令將彈出一個如圖1所示的窗口,在這個窗口中寫入您想檢查的類的名字(包括路徑)。圖1顯示的結果表示 Date類是可序列化的。
  
  再說一次,不是所有的Java類都是可序列化的。舉個例子,圖2表明Socket類是不可序列化的。
  
  序列化用戶自己的類
  現在,讓我們看看如何序列化用戶自己寫的類。在這個例子中,我們將建立一個用戶類UserInfo,見例程3。為了讓它可序列化,UserInfo類實現了Serializable接口。
  
  例程 3: UserInfo.java
  
  import java.io.*;
  import java.util.*;
  
  public class UserInfo implements Serializable {
  String name = null;
  
  public UserInfo(String name) {
  this.name = name;
  }
  
  public void printInfo() {
  System.out.println("The name is: "+name);
  }
  }
  
  下一步就是建立一個能創建UserInfo類實例的類,然后將對象寫入輸出流中,如例程4。本例中的輸出流是一個名為"name.out"的文件。要注重的是,例程4 中的writeObject方法可以被調用任意多次,將任意多個對象寫入輸出流。
  
  例程 4: SaveInfo.java
  
  import java.io.*;
  import java.util.Date;
  
  public class SaveInfo {
  
  public static void main(String argv[]) throws Exception {
  FileOutputStream fos = new FileOutputStream("name.out");
  ObjectOutputStream oos = new ObjectOutputStream(fos);
  // create two objects
  UserInfo user1 = new UserInfo("Java Duke");
  UserInfo user2 = new UserInfo("Java Blue");
  // write the objects to the output stream
  oos.writeObject(user1);
  oos.writeObject(user2);
  oos.flush();
  oos.close();
  fos.close();
  }
  }
  
  最后,我們寫一個將已經保存的對象讀入的類,并且調用一個如例程5所示的方法。和writeObject 一樣,readObject方法能被調用任意多次,從輸入流中讀入任意多個對象。
  
  例程 5: ReadInfo.java
  
  import java.io.*;
  import java.util.Date;
  
  public class ReadInfo {
  
  public static void main(String argv[]) throws Exception {
  FileInputStream fis = new FileInputStream("name.out");
  ObjectInputStream ois = new ObjectInputStream(fis);
  // read the objects from the input stream (the file name.out)
  UserInfo user1 = (UserInfo) ois.readObject();
  UserInfo user2 = (UserInfo) ois.readObject();
  // invoke a method on the constrUCted object
  user1.printInfo();
  user2.printInfo();
  ois.close();
  fis.close();
  }
  }
  
  要測試這個例子,請編譯如下源文件:UserInfo.java, SaveInfo.java, 和 ReadInfo.java。運行 SaveInfo,然后運行ReadInfo,將看到類似下面的輸出結果

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜欧美大片免费观看| 亚洲午夜国产成人av电影男同| 欧美理论在线观看| 久久免费成人精品视频| 欧美日韩国产成人高清视频| 国产一区私人高清影院| 欧美激情a在线| 欧美日韩亚洲激情| 国产精品com| 欧美一级高清免费播放| 一区二区三区www| 欧美在线播放视频| 91免费福利视频| 中文字幕欧美国内| 亚洲自拍欧美色图| 久久综合伊人77777尤物| 国产精品黄视频| 欧美一级片免费在线| 久久电影一区二区| 国产精品久久久久久中文字| 欧美黑人一区二区三区| 欧美一级淫片videoshd| 神马久久久久久| 夜色77av精品影院| 亚洲天堂av在线播放| 日韩福利伦理影院免费| 在线成人中文字幕| 亚洲人在线观看| 97视频国产在线| 国模gogo一区二区大胆私拍| 91久久在线视频| 米奇精品一区二区三区在线观看| 亚洲韩国欧洲国产日产av| 日本91av在线播放| 日韩中文字幕国产| www亚洲精品| 欧美日韩免费观看中文| 国内精品在线一区| 欧美久久精品午夜青青大伊人| 欧美在线视频导航| 亚洲性猛交xxxxwww| 亚洲精品456在线播放狼人| 亚洲精品国产美女| 国产精品男人爽免费视频1| 日韩欧美在线视频观看| 亚洲欧美一区二区三区情侣bbw| 在线精品91av| 欧美色播在线播放| 日韩不卡中文字幕| 97香蕉久久夜色精品国产| 亚洲视频一区二区三区| 欧美精品午夜视频| 国产精品爽爽爽爽爽爽在线观看| 国产成人精品一区二区| 国产精品美女呻吟| 亚洲欧美另类中文字幕| 91夜夜未满十八勿入爽爽影院| 亚洲最大av网| 日韩美女写真福利在线观看| 国产日产久久高清欧美一区| 欧美午夜www高清视频| 国产精品欧美久久久| 久久精品国产综合| 日本a级片电影一区二区| 青青久久av北条麻妃海外网| 91视频九色网站| 欧美中文字幕在线播放| 亚洲人成电影在线播放| 欧美成人在线网站| 国产精品久久久久久久久久三级| 亚洲人午夜精品免费| 永久555www成人免费| 国产精品极品美女在线观看免费| 午夜精品国产精品大乳美女| 久久精品成人动漫| www.亚洲天堂| 尤物九九久久国产精品的特点| 91精品视频在线免费观看| 国产精品久久久久久中文字| 亚洲第一综合天堂另类专| 国产91色在线| 国内揄拍国内精品少妇国语| 欧美精品在线观看| 91视频-88av| 不卡毛片在线看| 欧美日韩福利视频| 在线看日韩欧美| 国产精品激情av电影在线观看| 91亚洲国产成人久久精品网站| 日韩欧美a级成人黄色| 国产网站欧美日韩免费精品在线观看| 亚洲人精品午夜在线观看| 日韩一二三在线视频播| 综合网日日天干夜夜久久| 亚洲a区在线视频| 77777少妇光屁股久久一区| 91网在线免费观看| 欧美黑人极品猛少妇色xxxxx| 亚洲精品一区二区三区不| 亚洲第一视频网| 午夜精品福利电影| 久久久久久久久爱| 国产精品黄色av| 久久精品国产一区二区电影| 欧美激情精品久久久久久大尺度| 中国人与牲禽动交精品| 亚洲色图综合网| 欧美日韩电影在线观看| 欧美激情在线有限公司| 欧美极品第一页| 久久久久久久久久久久av| 欧美激情高清视频| 亚洲欧美一区二区激情| 色婷婷综合久久久久中文字幕1| 中文字幕精品网| 一本色道久久综合狠狠躁篇怎么玩| 国产a级全部精品| 国产精品美女视频网站| 日韩av高清不卡| 亚洲伊人第一页| 91免费高清视频| 欧美国产乱视频| 亚洲免费av片| 久久久久国产视频| 欧美限制级电影在线观看| 欧美综合第一页| 亚洲色无码播放| 日韩电影在线观看永久视频免费网站| 色噜噜亚洲精品中文字幕| 日韩极品精品视频免费观看| 伊人精品在线观看| 成人午夜激情免费视频| 91精品视频大全| xxxx欧美18另类的高清| 国产精品久久久久久婷婷天堂| 日韩中文娱乐网| 欧美乱大交xxxxx另类电影| 国产精品福利久久久| 久久亚洲电影天堂| 欧美网站在线观看| 亚洲高清一区二| 国产精品一二三视频| 国产精品久久久久9999| www.99久久热国产日韩欧美.com| 日韩免费av片在线观看| 亚洲欧美国产制服动漫| 91午夜在线播放| 亚洲成人免费网站| 66m—66摸成人免费视频| www欧美xxxx| 国内自拍欧美激情| 中文字幕亚洲欧美日韩在线不卡| 久久国产精品久久久| 国产精品久久久久久久av电影| 欧美性xxxx极品hd满灌| 91美女片黄在线观看游戏| 成人免费在线视频网址| 亚洲欧美精品中文字幕在线| 欧美成人剧情片在线观看| 欧美黑人国产人伦爽爽爽| 国产精品69av| 国产91成人video| 色综合男人天堂| 久久久久国产精品免费网站|