最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java IO數(shù)據(jù)操作流、對象序列化、壓縮流代碼解析

 更新時間:2018年01月06日 10:16:54   作者:漁歌向晚  
這篇文章主要介紹了java IO數(shù)據(jù)操作流、對象序列化、壓縮流代碼解析,具有一定借鑒價值,需要的朋友可以參考下

數(shù)據(jù)操作流

在io包中,提供了兩個與平臺無關(guān)的數(shù)據(jù)操作流:

數(shù)據(jù)輸入流(DataInputStream)

數(shù)據(jù)輸出流(DataOutputStream)

通常數(shù)據(jù)輸出流會按一定格式將數(shù)據(jù)輸出,再通過數(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ù)輸出流對象 
    File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路徑 
    dos = new DataOutputStream(new FileOutputStream(f)) ;  // 實例化數(shù)據(jù)輸出流對象 
    String names[] = {"襯衣","手套","圍巾"} ; // 商品名稱 
    float prices[] = {98.3f,30.3f,50.5f} ;   // 商品價格 
    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]) ; // 寫入價格 
      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ù)輸入流對象 
    File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路徑 
    dis = new DataInputStream(new FileInputStream(f)) ; // 實例化數(shù)據(jù)輸入流對象 
    String name = null ;  // 接收名稱 
    float price = 0.0f ;  // 接收價格 
    int num = 0 ;  // 接收數(shù)量 
    char temp[] = null ;  // 接收商品名稱 
    int len = 0 ;  // 保存讀取數(shù)據(jù)的個數(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 ++ ;  // 讀取長度加1 
        } 
        name = new String(temp,0,len) ; // 將字符數(shù)組變?yōu)镾tring 
        price = dis.readFloat() ;  // 讀取價格 
        dis.readChar() ;  // 讀取\t 
        num = dis.readInt() ;  // 讀取int 
        dis.readChar() ;  // 讀取\n 
        System.out.printf("名稱:%s;價格:%5.2f;數(shù)量:%d\n",name,price,num) ; 
      } 
    }catch(Exception e){} 
    dis.close() ; 
  } 
}; 

對象序列化

對象序列化就是把對象變?yōu)槎M制數(shù)據(jù)流的一種方法,通過對象的序列化可以方便的實現(xiàn)對象的傳輸或儲存。

如果一個類想支持初始化,則該類必須實現(xiàn)java.io.Serilizable接口。該接口定義如下:

publicinterfaceSerilizable{}

該接口中不存在方法,因此該類屬于一個標(biāo)示接口,表示實現(xiàn)該的接口的類具備某種能力。

1.對象的序列化與反序列化

2.serialVersionUID

在序列化的操作中引入了一個serialVersionUID常量,可以通過此常量來驗證版本的一致性,在進行反序列化的時候,JVM會把傳進來的字節(jié)流中的serialVersionUID與本地對應(yīng)類的serialVersionUID進行比較,如果相同就認(rèn)為是一致的,可以進行反序列化,否則就會出現(xiàn)序列化版本不一致的異常。

import java.io.Serializable ; 
public class Person implementsSerializable{ 
     private String name ;    // 聲明name屬性,但是此屬性不被序列化 
     private int age ;         // 聲明age屬性 
     publicPerson(String name,int age){     // 通過構(gòu)造設(shè)置內(nèi)容 
          this.name= name ; 
          this.age= age ; 
     } 
     publicString toString(){  // 覆寫toString()方法 
          return"姓名:" + this.name + ";年齡:" + this.age; 
     } 
}; 

3. 對象輸出流:ObjectOutputStream

一個對象要想進行輸出,就必須使用ObjectOutputStream類,該類定義如下

如果一個對象中的某個屬性不希望被序列化的話,則可以使用transient關(guā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 ;   // 聲明對象輸出流 
      OutputStream out = newFileOutputStream(f) ;   // 文件輸出流 
      oos = new ObjectOutputStream(out) ; 
      oos.writeObject(new Person("張三",30));   // 保存對象 
      oos.close() ;   // 關(guān)閉 
} 
}; 

4. 對象輸入流: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 ;     // 聲明對象輸入流 
      InputStream input = newFileInputStream(f) ;     // 文件輸入流 
      ois = new ObjectInputStream(input) ;   // 實例化對象輸入流 
      Object obj = ois.readObject() ;     // 讀取對象 
      ois.close() ;    // 關(guān)閉 
      System.out.println(obj) ; 
} 
}; 

6.序列化一組對象

對象輸出時只提供了一個對象的輸出操作(writeObject(Objectobj)),并沒有提供多個對象的輸出,如果現(xiàn)在要對多個對象進行序列化的操作,則可以使用對象數(shù)組完成,由于數(shù)組是引用數(shù)據(jù)類型,所以可以直接使用Object類型進行接收。

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 ;   // 聲明對象輸出流 
      OutputStream out = new FileOutputStream(f);   // 文件輸出流 
      oos = new ObjectOutputStream(out) ; 
      oos.writeObject(obj) ;   // 保存對象 
      oos.close() ;   // 關(guān)閉 
} 
public static Object[] dser() throws Exception{ 
      File f = new File("D:" +File.separator + "test.txt") ;    //定義保存路徑 
      ObjectInputStream ois = null ;     // 聲明對象輸入流 
      InputStream input = newFileInputStream(f) ;     // 文件輸入流 
      ois = new ObjectInputStream(input) ;   // 實例化對象輸入流 
      Object obj[] =(Object[])ois.readObject() ;    // 讀取對象 
      ois.close() ;    // 關(guān)閉 
      return obj ; 
} 
}; 

數(shù)組能儲存的對象數(shù)量有限,因此可以使用類集進行序列化的操作。

壓縮流

在Java中為了減少傳輸時的數(shù)據(jù)量也專門提供了壓縮流,可以將文件或者文件夾壓縮成ZIP、JAR、GZIP等格式。

該流使用較少,因此只做簡要介紹。

總結(jié)

以上就是本文關(guān)于java IO數(shù)據(jù)操作流、對象序列化、壓縮流代碼解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Java對象轉(zhuǎn)JSON時動態(tài)的增刪改查屬性詳解

    Java對象轉(zhuǎn)JSON時動態(tài)的增刪改查屬性詳解

    這篇文章主要介紹了Java對象轉(zhuǎn)JSON時如何動態(tài)的增刪改查屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 通過原理解析Spring mvc的內(nèi)置編碼過濾器

    通過原理解析Spring mvc的內(nèi)置編碼過濾器

    這篇文章通過原理主要給大家解析了關(guān)于Spring mvc的內(nèi)置編碼過濾器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • java bootclasspath的具體用法

    java bootclasspath的具體用法

    本文主要介紹了java bootclasspath的具體用法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • SpringBoot使用Redis對用戶IP進行接口限流的項目實踐

    SpringBoot使用Redis對用戶IP進行接口限流的項目實踐

    本文主要介紹了SpringBoot使用Redis對用戶IP進行接口限流,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringMVC中使用Thymeleaf模板引擎實例代碼

    SpringMVC中使用Thymeleaf模板引擎實例代碼

    這篇文章主要介紹了SpringMVC中使用Thymeleaf模板引擎實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java判斷ip是否為IPV4或IPV6地址的多種方式

    Java判斷ip是否為IPV4或IPV6地址的多種方式

    本文主要介紹了Java判斷ip是否為IPV4或IPV6地址的多種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 這一次搞懂Spring的Bean實例化原理操作

    這一次搞懂Spring的Bean實例化原理操作

    這篇文章主要介紹了這一次搞懂Spring的Bean實例化原理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • springboot配置druid多數(shù)據(jù)源的示例代碼

    springboot配置druid多數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了springboot配置druid多數(shù)據(jù)源的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • springboot+idea熱部署的實現(xiàn)方法(自動刷新)

    springboot+idea熱部署的實現(xiàn)方法(自動刷新)

    這篇文章主要介紹了springboot+idea熱部署的實現(xiàn)方法(自動刷新),本文分步驟通過實例代碼截圖相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • java返回前端實體類json數(shù)據(jù)時忽略某個屬性方法

    java返回前端實體類json數(shù)據(jù)時忽略某個屬性方法

    這篇文章主要給大家介紹了關(guān)于java返回前端實體類json數(shù)據(jù)時忽略某個屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-08-08

最新評論

花莲县| 汶川县| 邯郸市| 彭水| 改则县| 芦溪县| 合川市| 盐山县| 滕州市| 福海县| 孝昌县| 崇文区| 富裕县| 安吉县| 舒城县| 麻城市| 连平县| 汽车| 濮阳县| 府谷县| 拉孜县| 阿图什市| 沈阳市| 乌审旗| 皮山县| 江川县| 肃北| 大同县| 白银市| 林芝县| 紫金县| 桦南县| 高台县| 深水埗区| 武安市| 犍为县| 鄄城县| 蒙城县| 高陵县| 安远县| 渭源县|