国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java對(duì)象流在網(wǎng)絡(luò)編程中的運(yùn)用

2014-09-18 16:36:59馮鋼
電腦知識(shí)與技術(shù) 2014年23期
關(guān)鍵詞:序列化對(duì)象

馮鋼

摘要:針對(duì)Java的Socket網(wǎng)絡(luò)編程,文中通過(guò)分析對(duì)象的序列、對(duì)象流的知識(shí),探討對(duì)象流在Socket編程中的應(yīng)用方法,結(jié)合實(shí)例分析字符流和對(duì)象流在實(shí)現(xiàn)復(fù)雜數(shù)據(jù)在網(wǎng)絡(luò)傳輸方法,對(duì)于復(fù)雜數(shù)據(jù)的網(wǎng)絡(luò)傳輸利用對(duì)象流可提高編程效率。

關(guān)鍵詞:Socket ;對(duì)象;序列化

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)23-5445-04

在面向Internet的網(wǎng)絡(luò)信息系統(tǒng)中,客戶/服務(wù)得到廣泛應(yīng)用,在Java的網(wǎng)絡(luò)編程中,網(wǎng)絡(luò)通信程序主要是基于Java的Socket來(lái)實(shí)現(xiàn)。常用的輸入/輸出流主要是字節(jié)流和字符流,通過(guò)字節(jié)流和字符流可方便在客戶程序和服務(wù)器程序間傳送數(shù)據(jù),一般簡(jiǎn)單數(shù)據(jù)而言利用字節(jié)流或字符流可方便解決,對(duì)于復(fù)雜數(shù)據(jù)而言,利用上述方法也能完成,但在傳輸前要對(duì)傳輸?shù)臄?shù)據(jù)按定義的規(guī)則進(jìn)行包裝,在接收到時(shí)數(shù)據(jù)時(shí)又要對(duì)獲取的數(shù)據(jù)近規(guī)則進(jìn)行解析,實(shí)現(xiàn)較為繁瑣,如果利用對(duì)象的序列化及對(duì)象流可方便解決復(fù)雜數(shù)據(jù)的傳輸問(wèn)題,可簡(jiǎn)化數(shù)據(jù)的包裝與解析的過(guò)程,提高編程效率。

1 對(duì)象序列化及對(duì)象流

1.1 對(duì)象的序列化

當(dāng)兩個(gè)進(jìn)程在進(jìn)行遠(yuǎn)程通信時(shí),彼此可以發(fā)送各種類型的數(shù)據(jù)。無(wú)論是何種類型的數(shù)據(jù),都會(huì)以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送。如果傳輸是Java對(duì)象,則發(fā)送方需要把這個(gè)Java對(duì)象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)絡(luò)上傳送;接收方則需要把字節(jié)序列再恢復(fù)為Java對(duì)象。

把Java對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程稱為對(duì)象的序列化。

把字節(jié)序列恢復(fù)為Java對(duì)象的過(guò)程稱為對(duì)象的反序列化。

對(duì)象的序列化主要有兩種用途:

1) 把對(duì)象的字節(jié)序列永久地保存到硬盤上,通常存放在一個(gè)文件中;

2) 在網(wǎng)絡(luò)上傳送對(duì)象的字節(jié)序列。

1.2 對(duì)象流

java.io.ObjectOutputStream代表對(duì)象輸出流,它的writeObject(Object obj)方法可對(duì)參數(shù)指定的obj對(duì)象進(jìn)行序列化,把得到的字節(jié)序列寫到一個(gè)目標(biāo)輸出流中。

java.io.ObjectInputStream代表對(duì)象輸入流,它的readObject()方法從一個(gè)源輸入流中讀取字節(jié)序列,再把它們反序列化為一個(gè)對(duì)象,并將其返回。、

只有實(shí)現(xiàn)了Serializable和Externalizable接口的類的對(duì)象才能被序列化。Externalizable接口繼承自Serializable接口,實(shí)現(xiàn)Externalizable接口的類完全由自身來(lái)控制序列化的行為,而僅實(shí)現(xiàn)Serializable接口的類可以采用默認(rèn)的序列化方式 。

對(duì)象序列化包括如下步驟:

1) 創(chuàng)建一個(gè)對(duì)象輸出流,它可以包裝一個(gè)其他類型的目標(biāo)輸出流,如文件輸出流;

2) 通過(guò)對(duì)象輸出流的writeObject()方法寫對(duì)象。

對(duì)象反序列化的步驟如下:

1) 創(chuàng)建一個(gè)對(duì)象輸入流,它可以包裝一個(gè)其他類型的源輸入流,如文件輸入流;

2) 通過(guò)對(duì)象輸入流的readObject()方法讀取對(duì)象。

2 實(shí)例分析

編寫網(wǎng)絡(luò)注冊(cè)程序,客戶程序?qū)崿F(xiàn)用戶注冊(cè),注冊(cè)信息:用戶名,密碼、聯(lián)系電話、所學(xué)專業(yè),服務(wù)程序?qū)崿F(xiàn)用戶注冊(cè)信息的獲取,后繼略。

2.1 利用字符流實(shí)現(xiàn)

1) 客戶端注冊(cè)程序

在注冊(cè)客戶程序中,首先連接服務(wù)器,點(diǎn)擊注冊(cè)按鈕,獲取用戶的注冊(cè)信息,將用戶構(gòu)建為字符串,用“,”作為分隔符,便于服務(wù)端程序解析。范例實(shí)現(xiàn)如下:

服務(wù)端接收程序在接收到客戶發(fā)出的信息后,由于得到是一字符串,必須從中解析出用戶的存著信息(用戶名、密碼、聯(lián)系電話、專業(yè))等信息,然后才能進(jìn)行后繼相關(guān)操作,解析的方法有多種,范例如下:通過(guò)字符型數(shù)據(jù)的split(",")方法,分隔相關(guān)信息存入數(shù)組mess,后繼通過(guò)讀取數(shù)組mess中的數(shù)據(jù)完成相關(guān)操作,如:顯示、存入數(shù)據(jù)庫(kù)等

2.2 利用對(duì)象流實(shí)現(xiàn)

1) 創(chuàng)建用戶信息類,實(shí)現(xiàn)Serializable接口,用于對(duì)象的序列化。

2) 客戶端注冊(cè)程序

在注冊(cè)客戶程序中,首先連接服務(wù)器,點(diǎn)擊注冊(cè)按鈕,獲取用戶的注冊(cè)信息,通過(guò)獲取信息構(gòu)建對(duì)象,利用對(duì)象流進(jìn)行網(wǎng)絡(luò)傳輸,范例實(shí)現(xiàn)如下:

① 連接服務(wù)器,初始化對(duì)象流

3) 服務(wù)端接收程序

服務(wù)端接收程序通過(guò)對(duì)象流獲取對(duì)象序列的數(shù)據(jù)可直接轉(zhuǎn)換為相關(guān)對(duì)象。

① 啟動(dòng)服務(wù)器,等待客戶連接,連接成功后,創(chuàng)建對(duì)象輸入流,用戶于數(shù)據(jù)讀取

ServerSocket ss=new ServerSocket(7777);

Socket sc = ss.accept();

this.jLabMess.setText("客戶連接成功");

BufferedInputStream in = new BufferedInputStream(sc.getInputStream());

//初始化輸入對(duì)象流

bread = new ObjectInputStream(in);

//啟動(dòng)線程,接收客戶注冊(cè)數(shù)據(jù)

new MyThread().start();

② 用戶有數(shù)據(jù)發(fā)出,通過(guò)對(duì)象輸入流readObject()方法,直接的獲取相關(guān)數(shù)據(jù)

UserInfo utem=(UserInfo)bread.readObject();

//后繼操作,如顯示等……

jTextArea1.append("用戶名:"+utem.getName()+"\n");

jTextArea1.append("密碼:"+utem.getPassword()+"\n");

jTextArea1.append("電話:"+utem.getPhone()+"\n");

jTextArea1.append("專業(yè):"+utem.getProfession());

運(yùn)行效果:

3 結(jié)束語(yǔ)

Java的網(wǎng)絡(luò)編程主要通過(guò)Socket完成,文中先介紹了對(duì)象的序列化及對(duì)象流的相關(guān)知識(shí),在設(shè)計(jì)范例分別通過(guò)字符流和對(duì)象流完成相關(guān)設(shè)計(jì),通過(guò)二者比較,在復(fù)雜數(shù)據(jù)傳輸中,利用對(duì)象可方便解決利用字符流傳輸中的數(shù)據(jù)傳送前的包裝和數(shù)據(jù)接收后的解析問(wèn)題,充分利用對(duì)象流可為編程帶來(lái)了方便,提高編程效率。

參考文獻(xiàn):

[1] Bruce Eckel.Java. Java編程思想[M].陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,2009.

[2] 徐義晗,史夢(mèng)安,史志英.Java程序設(shè)計(jì)項(xiàng)目化教程[M].北京:北京大學(xué)出版社,2011.

[3] 許文勇.基于Socket的網(wǎng)絡(luò)編程技術(shù)及其實(shí)現(xiàn)[J].無(wú)線互聯(lián)科技,2014(5):17

[4] 賈振華.Java語(yǔ)言程序設(shè)計(jì)[M].北京:中國(guó)水利水電出版社,2001.

猜你喜歡
序列化對(duì)象
神秘來(lái)電
睿士(2023年2期)2023-03-02 02:01:09
涉稅刑事訴訟中的舉證責(zé)任——以納稅人舉證責(zé)任為考察對(duì)象
如何建構(gòu)序列化閱讀教學(xué)
甘肅教育(2020年14期)2020-09-11 07:58:36
攻略對(duì)象的心思好難猜
意林(2018年3期)2018-03-02 15:17:24
基于熵的快速掃描法的FNEA初始對(duì)象的生成方法
Java反序列化漏洞探析及其修復(fù)方法研究
湖北電力(2016年11期)2016-11-07 07:25:37
論初中語(yǔ)文作文的序列化訓(xùn)練
Java 反序列化漏洞研究
區(qū)間對(duì)象族的可鎮(zhèn)定性分析
作文訓(xùn)練微格化、序列化初探
福清市| 榆树市| 越西县| 江孜县| 玉林市| 高邮市| 泾阳县| 邳州市| 蓬安县| 环江| 齐齐哈尔市| 伽师县| 霸州市| 宜城市| 六枝特区| 南宫市| 武邑县| 华亭县| 奎屯市| 平凉市| 普兰县| 桃江县| 准格尔旗| 门头沟区| 大方县| 梅州市| 桦川县| 寿阳县| 名山县| 金华市| 收藏| 马鞍山市| 杂多县| 长汀县| 彭州市| 新乐市| 瑞安市| 青川县| 黑水县| 丹江口市| 田东县|