欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應用場景

 更新時間:2023年06月14日 15:27:47   作者:微揚嘴角  
這篇文章主要介紹了Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應用場景,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、轉(zhuǎn)換流

轉(zhuǎn)換流屬于字符流,也是一種高級流,用來包裝Reader和Writer。轉(zhuǎn)化流是字符流和字節(jié)流之間的橋梁。轉(zhuǎn)換輸入流為InputStreamReader,把把字節(jié)流轉(zhuǎn)化為字符流;轉(zhuǎn)化輸出流為OutputStreamWriter,把字符流轉(zhuǎn)化為字節(jié)流。

應用場景:字節(jié)流想要使用字符流中的方法則使用轉(zhuǎn)換流。
例如,使用轉(zhuǎn)換輸入流讀取文件:
一個ANSI編碼的文件:

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建對象并指定字符編碼讀取
        InputStreamReader isr = new InputStreamReader(new FileInputStream("javase-learning\\src\\example\\org\\domain\\c(ANSI).txt"),"GBK");
        //2.讀取數(shù)據(jù)
        int ch;
        while((ch = isr.read())!= -1){
            System.out.println((char)ch);
        }
        //3.釋放資源
        isr.close();
    }
}

上述這種寫法JDK11有了替代方案,使用FileReader,其實FileReader是InputStreamReader的子類。。

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建對象并指定字符編碼讀取
       FileReader fr = new FileReader("javase-learning\\src\\example\\org\\domain\\c(ANSI).txt", Charset.forName("GBK"));
        //2.讀取數(shù)據(jù)
        int ch;
        while((ch = fr.read())!= -1){
            System.out.println((char)ch);
        }
        //3.釋放資源
        fr.close();
    }
}

再例如,使用轉(zhuǎn)化輸出流寫文件:

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建對象并指定字符編碼
       OutputStreamWriter osw = new  OutputStreamWriter(new FileOutputStream("javase-learning\\src\\example\\org\\domain\\d.txt"), "GBK");
        //2.寫出數(shù)據(jù)
       osw.write("你好你好");
        //3.釋放資源
        osw.close();
    }
}

JDK11替代方案:

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建對象并指定字符編碼
      FileWriter fw = new  FileWriter("javase-learning\\src\\example\\org\\domain\\d.txt", Charset.forName("GBK"));
        //2.寫出數(shù)據(jù)
       fw.write("你好你好");
        //3.釋放資源
        fw.close();
    }
}

再例如,將本地文件的GBK文件轉(zhuǎn)為UTF-8文件:


注意:上述代碼運行后d.txt的內(nèi)容與b.txt的內(nèi)容用記事本打開結(jié)果相同,且d.txt的編碼方式為UTF-8。

二、序列化流和反序列化流

序列化流(ObjectOutputStream,也稱對象操作輸出流)與反序列化流(ObjectInputStream,也稱對象操作輸入流)屬于字節(jié)流,也是高級流,是對基本流的包裝。

序列化流可以把java中的對象輸出到本地文件中。
說明:存儲java對象可以用基本流直接存儲屬性值,還能直接對文件進行修改。而序列化流存儲java對象打開文件是看不懂的,而無法直接修改,這樣可以防止暫時存儲在文件中的數(shù)據(jù)被用戶修改。
(一)序列化流
構(gòu)造方法:

成員方法:

例如,新建一個User類:

注意:直接使用對象輸出流將對象保存到文件中會出現(xiàn)NotSerializableException異常,解決方法是讓JavaBean類實現(xiàn)Serializable接口。

注意:可以看出實現(xiàn)了Serializable接口不用重寫方法,因為Serializable接口中沒有抽象方法,是標記型接口,一旦實現(xiàn)了這個接口,就表示當前的類可以被序列化。

編寫代碼實現(xiàn)序列化:

結(jié)果如下:

(二)反序列化流

注意:
如果將javabean對象通過序列化存入本地文件,如果這時修改javabean類,再去讀取原來存儲的javabean對象賦給修改后的類創(chuàng)建對象會報錯。
為了防止報錯,可以在類中定義版本號,這個版本號會存入通過序列化流存入的本地文件。

如果不想把某些屬性字段保存到本地文件中,可以在該屬性字段前加瞬態(tài)關鍵字transient。

再例如,運用序列化流和反序列化流讀寫多個對象。
方式一(讀之前已知寫入了多少個對象):

方式二(讀之前不知道寫入了多少個對象):

補充:

三、打印流

java.io.PrintStream:打印流

PrintStream 為其他輸出流添加了功能,使它們能夠方便地打印各種數(shù)據(jù)值表示形式。

PrintStream特點:

1.只負責數(shù)據(jù)的輸出,不負責數(shù)據(jù)的讀取

2.與其他輸出流不同,PrintStream 永遠不會拋出 IOException

3.有特有的方法,print,println

void print(任意類型的值)
void println(任意類型的值并換行)

構(gòu)造方法:

PrintStream(File file):輸出的目的地是一個文件
PrintStream(OutputStream out):輸出的目的地是一個字節(jié)輸出流
PrintStream(String fileName) :輸出的目的地是一個文件路徑
PrintStream extends OutputStream

繼承自父類的成員方法:

- public void close() :關閉此輸出流并釋放與此流相關聯(lián)的任何系統(tǒng)資源。
- public void flush() :刷新此輸出流并強制任何緩沖的輸出字節(jié)被寫出。
- public void write(byte[] b):將 b.length字節(jié)從指定的字節(jié)數(shù)組寫入此輸出流。
- public void write(byte[] b, int off, int len) :從指定的字節(jié)數(shù)組寫入 len字節(jié),從偏移量 off開始輸出到此輸出流。
- public abstract void write(int b) :將指定的字節(jié)輸出流。

注意:

如果使用繼承自父類的write方法寫數(shù)據(jù),那么查看數(shù)據(jù)的時候會查詢編碼表 97->a

如果使用自己特有的方法print/println方法寫數(shù)據(jù),寫的數(shù)據(jù)原樣輸出 97->97

可以改變輸出語句的目的地(打印流的流向)

輸出語句,默認在控制臺輸出

使用System.setOut方法改變輸出語句的目的地改為參數(shù)中傳遞的打印流的目的地

static void setOut(PrintStream out)

重新分配“標準”輸出流。

到此這篇關于Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應用場景的文章就介紹到這了,更多相關java轉(zhuǎn)換流、壓縮流、序列化流、打印流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解

    SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解

    這篇文章主要介紹了SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解,SpringMVC中Spring容器的關系是通過監(jiān)聽方式啟動的,那么Spring與Servlet的Web容器(如:Tomcat、jetty)的關系則是通過DispatcherServlet進行關聯(lián),需要的朋友可以參考下
    2024-01-01
  • Spring Boot Log4j2的配置使用詳解

    Spring Boot Log4j2的配置使用詳解

    本篇文章主要介紹了Spring Boot Log4j2的配置使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot上傳文件大小受限問題的解決辦法

    SpringBoot上傳文件大小受限問題的解決辦法

    最近有一次由于項目升級發(fā)現(xiàn)了一個上傳方面的問題,下面這篇文章主要給大家介紹了關于SpringBoot上傳文件大小受限問題的解決辦法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Mybatis學習總結(jié)之mybatis使用建議

    Mybatis學習總結(jié)之mybatis使用建議

    這篇文章主要介紹了Mybatis學習總結(jié)之mybatis使用建議的相關資料,非常具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • windows?java?-jar無法啟動jar包簡單的解決方法

    windows?java?-jar無法啟動jar包簡單的解決方法

    這篇文章主要介紹了windows?java?-jar無法啟動jar包簡單的解決方法,文中通過代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-12-12
  • java中對象轉(zhuǎn)json字符串的三種常用方式

    java中對象轉(zhuǎn)json字符串的三種常用方式

    本文主要介紹了java中對象轉(zhuǎn)json字符串的三種常用方式,包含Jackson庫,Gson庫和Hutool工具類這三種,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Java yield()線程讓步實現(xiàn)過程解析

    Java yield()線程讓步實現(xiàn)過程解析

    這篇文章主要介紹了Java yield()線程讓步實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java對List進行排序的兩種實現(xiàn)方法

    Java對List進行排序的兩種實現(xiàn)方法

    這篇文章主要給大家介紹了關于Java對List進行排序的兩種實現(xiàn)方法,第一種是實體類自己實現(xiàn)比較,第二種是借助比較器進行排序,下面開一起看看詳細的介紹吧,有需要的朋友們可以參考借鑒。
    2016-12-12
  • SpringBoot+Redis實現(xiàn)不重復消費的隊列的示例代碼

    SpringBoot+Redis實現(xiàn)不重復消費的隊列的示例代碼

    本文主要介紹了SpringBoot+Redis實現(xiàn)不重復消費的隊列的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • Mybatis plus枚舉處理器的具體使用

    Mybatis plus枚舉處理器的具體使用

    在開發(fā)中,數(shù)據(jù)庫表中的字段很常見會使用枚舉類型來表示一些固定的取值范圍,本文主要介紹了Mybatis plus枚舉處理器的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論