這篇文章主要為大家展示了“java中IO數(shù)據(jù)操作流、對(duì)象序列化、壓縮流的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java中IO數(shù)據(jù)操作流、對(duì)象序列化、壓縮流的示例分析”這篇文章吧。
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供成都做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!數(shù)據(jù)操作流
在io包中,提供了兩個(gè)與平臺(tái)無(wú)關(guān)的數(shù)據(jù)操作流:
數(shù)據(jù)輸入流(DataInputStream)
數(shù)據(jù)輸出流(DataOutputStream)
通常數(shù)據(jù)輸出流會(huì)按一定格式將數(shù)據(jù)輸出,再通過(guò)數(shù)據(jù)輸入流按照一定格式將數(shù)據(jù)讀入
DataOutputStream接口定義了一系列的writeXxx()的操作,可以寫入各種數(shù)據(jù)類型的數(shù)據(jù)。
范例:使用數(shù)據(jù)操作流寫入與讀出數(shù)據(jù)
import java.io.DataOutputStream ; import java.io.File ; import java.io.FileOutputStream ; public class DataOutputStreamDemo{ public static void main(String args[]) throws Exception{ // 所有異常拋出 DataOutputStream dos = null ; // 聲明數(shù)據(jù)輸出流對(duì)象 File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路徑 dos = new DataOutputStream(new FileOutputStream(f)) ; // 實(shí)例化數(shù)據(jù)輸出流對(duì)象 String names[] = {"襯衣","手套","圍巾"} ; // 商品名稱 float prices[] = {98.3f,30.3f,50.5f} ; // 商品價(jià)格 int nums[] = {3,2,1} ; // 商品數(shù)量 for(int i=0;i<names.length;i++){ // 循環(huán)輸出 dos.writeChars(names[i]) ; // 寫入字符串 dos.writeChar('\t') ; // 寫入分隔符 dos.writeFloat(prices[i]) ; // 寫入價(jià)格 dos.writeChar('\t') ; // 寫入分隔符 dos.writeInt(nums[i]) ; // 寫入數(shù)量 dos.writeChar('\n') ; // 換行 } dos.close() ; // 關(guān)閉輸出流 } };
import java.io.DataInputStream ; import java.io.File ; import java.io.FileInputStream ; public class DataInputStreamDemo{ public static void main(String args[]) throws Exception{ // 所有異常拋出 DataInputStream dis = null ; // 聲明數(shù)據(jù)輸入流對(duì)象 File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路徑 dis = new DataInputStream(new FileInputStream(f)) ; // 實(shí)例化數(shù)據(jù)輸入流對(duì)象 String name = null ; // 接收名稱 float price = 0.0f ; // 接收價(jià)格 int num = 0 ; // 接收數(shù)量 char temp[] = null ; // 接收商品名稱 int len = 0 ; // 保存讀取數(shù)據(jù)的個(gè)數(shù) char c = 0 ; // '\u0000' try{ while(true){ temp = new char[200] ; // 開辟空間 len = 0 ; while((c=dis.readChar())!='\t'){ // 接收內(nèi)容 temp[len] = c ; len ++ ; // 讀取長(zhǎng)度加1 } name = new String(temp,0,len) ; // 將字符數(shù)組變?yōu)镾tring price = dis.readFloat() ; // 讀取價(jià)格 dis.readChar() ; // 讀取\t num = dis.readInt() ; // 讀取int dis.readChar() ; // 讀取\n System.out.printf("名稱:%s;價(jià)格:%5.2f;數(shù)量:%d\n",name,price,num) ; } }catch(Exception e){} dis.close() ; } };
對(duì)象序列化
對(duì)象序列化就是把對(duì)象變?yōu)槎M(jìn)制數(shù)據(jù)流的一種方法,通過(guò)對(duì)象的序列化可以方便的實(shí)現(xiàn)對(duì)象的傳輸或儲(chǔ)存。
如果一個(gè)類想支持初始化,則該類必須實(shí)現(xiàn)java.io.Serilizable接口。該接口定義如下:
publicinterfaceSerilizable{}
該接口中不存在方法,因此該類屬于一個(gè)標(biāo)示接口,表示實(shí)現(xiàn)該的接口的類具備某種能力。
1.對(duì)象的序列化與反序列化
2.serialVersionUID
在序列化的操作中引入了一個(gè)serialVersionUID常量,可以通過(guò)此常量來(lái)驗(yàn)證版本的一致性,在進(jìn)行反序列化的時(shí)候,JVM會(huì)把傳進(jìn)來(lái)的字節(jié)流中的serialVersionUID與本地對(duì)應(yīng)類的serialVersionUID進(jìn)行比較,如果相同就認(rèn)為是一致的,可以進(jìn)行反序列化,否則就會(huì)出現(xiàn)序列化版本不一致的異常。
import java.io.Serializable ; public class Person implementsSerializable{ private String name ; // 聲明name屬性,但是此屬性不被序列化 private int age ; // 聲明age屬性 publicPerson(String name,int age){ // 通過(guò)構(gòu)造設(shè)置內(nèi)容 this.name= name ; this.age= age ; } publicString toString(){ // 覆寫toString()方法 return"姓名:" + this.name + ";年齡:" + this.age; } };
3. 對(duì)象輸出流:ObjectOutputStream
一個(gè)對(duì)象要想進(jìn)行輸出,就必須使用ObjectOutputStream類,該類定義如下
如果一個(gè)對(duì)象中的某個(gè)屬性不希望被序列化的話,則可以使用transient關(guān)鍵字進(jìn)行聲明。
importjava.io.File ; importjava.io.FileOutputStream ; importjava.io.OutputStream ; importjava.io.ObjectOutputStream ; publicclass SerDemo01{ public static void main(String args[]) throwsException { File f = new File("D:" +File.separator + "test.txt") ; //定義保存路徑 ObjectOutputStream oos = null ; // 聲明對(duì)象輸出流 OutputStream out = newFileOutputStream(f) ; // 文件輸出流 oos = new ObjectOutputStream(out) ; oos.writeObject(new Person("張三",30)); // 保存對(duì)象 oos.close() ; // 關(guān)閉 } };
4. 對(duì)象輸入流:ObjectInputStream
importjava.io.File ; importjava.io.FileInputStream ; importjava.io.InputStream ; importjava.io.ObjectInputStream ; publicclass SerDemo02{ public static void main(String args[]) throwsException { File f = new File("D:" +File.separator + "test.txt") ; //定義保存路徑 ObjectInputStream ois = null ; // 聲明對(duì)象輸入流 InputStream input = newFileInputStream(f) ; // 文件輸入流 ois = new ObjectInputStream(input) ; // 實(shí)例化對(duì)象輸入流 Object obj = ois.readObject() ; // 讀取對(duì)象 ois.close() ; // 關(guān)閉 System.out.println(obj) ; } };
6.序列化一組對(duì)象
對(duì)象輸出時(shí)只提供了一個(gè)對(duì)象的輸出操作(writeObject(Objectobj)),并沒有提供多個(gè)對(duì)象的輸出,如果現(xiàn)在要對(duì)多個(gè)對(duì)象進(jìn)行序列化的操作,則可以使用對(duì)象數(shù)組完成,由于數(shù)組是引用數(shù)據(jù)類型,所以可以直接使用Object類型進(jìn)行接收。
importjava.io.File ; importjava.io.IOException ; importjava.io.FileOutputStream ; importjava.io.OutputStream ; importjava.io.ObjectOutputStream ; importjava.io.FileInputStream ; importjava.io.InputStream ; importjava.io.ObjectInputStream ; publicclass SerDemo05{ public static void main(String args[]) throwsException{ Person per[] = {new Person("張三",30),newPerson("李四",31), new Person("王五",32)}; ser(per) ; Object o[] = (Object[])dser() ; for(int i=0;i<o.length;i++){ Person p = (Person)o[i] ; System.out.println(p) ; } } public static void ser(Object obj[]) throwsException { File f = new File("D:" +File.separator + "test.txt") ; //定義保存路徑 ObjectOutputStream oos = null ; // 聲明對(duì)象輸出流 OutputStream out = new FileOutputStream(f); // 文件輸出流 oos = new ObjectOutputStream(out) ; oos.writeObject(obj) ; // 保存對(duì)象 oos.close() ; // 關(guān)閉 } public static Object[] dser() throws Exception{ File f = new File("D:" +File.separator + "test.txt") ; //定義保存路徑 ObjectInputStream ois = null ; // 聲明對(duì)象輸入流 InputStream input = newFileInputStream(f) ; // 文件輸入流 ois = new ObjectInputStream(input) ; // 實(shí)例化對(duì)象輸入流 Object obj[] =(Object[])ois.readObject() ; // 讀取對(duì)象 ois.close() ; // 關(guān)閉 return obj ; } };
數(shù)組能儲(chǔ)存的對(duì)象數(shù)量有限,因此可以使用類集進(jìn)行序列化的操作。
壓縮流
在Java中為了減少傳輸時(shí)的數(shù)據(jù)量也專門提供了壓縮流,可以將文件或者文件夾壓縮成ZIP、JAR、GZIP等格式。
該流使用較少,因此只做簡(jiǎn)要介紹。
以上是“java中IO數(shù)據(jù)操作流、對(duì)象序列化、壓縮流的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
標(biāo)題名稱:java中IO數(shù)據(jù)操作流、對(duì)象序列化、壓縮流的示例分析-創(chuàng)新互聯(lián)
文章位置:http://muchs.cn/article38/ioesp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、云服務(wù)器、做網(wǎng)站、網(wǎng)站制作、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容