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

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

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

一、轉(zhuǎn)換流

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

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

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建對(duì)象并指定字符編碼讀取
        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();
    }
}

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

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建對(duì)象并指定字符編碼讀取
       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)化輸出流寫(xiě)文件:

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

JDK11替代方案:

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

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


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

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

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

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

成員方法:

例如,新建一個(gè)User類:

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

注意:可以看出實(shí)現(xiàn)了Serializable接口不用重寫(xiě)方法,因?yàn)镾erializable接口中沒(méi)有抽象方法,是標(biāo)記型接口,一旦實(shí)現(xiàn)了這個(gè)接口,就表示當(dāng)前的類可以被序列化。

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

結(jié)果如下:

(二)反序列化流

注意:
如果將javabean對(duì)象通過(guò)序列化存入本地文件,如果這時(shí)修改javabean類,再去讀取原來(lái)存儲(chǔ)的javabean對(duì)象賦給修改后的類創(chuàng)建對(duì)象會(huì)報(bào)錯(cuò)。
為了防止報(bào)錯(cuò),可以在類中定義版本號(hào),這個(gè)版本號(hào)會(huì)存入通過(guò)序列化流存入的本地文件。

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

再例如,運(yùn)用序列化流和反序列化流讀寫(xiě)多個(gè)對(duì)象。
方式一(讀之前已知寫(xiě)入了多少個(gè)對(duì)象):

方式二(讀之前不知道寫(xiě)入了多少個(gè)對(duì)象):

補(bǔ)充:

三、打印流

java.io.PrintStream:打印流

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

PrintStream特點(diǎn):

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

2.與其他輸出流不同,PrintStream 永遠(yuǎn)不會(huì)拋出 IOException

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

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

構(gòu)造方法:

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

繼承自父類的成員方法:

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

注意:

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

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

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

輸出語(yǔ)句,默認(rèn)在控制臺(tái)輸出

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

static void setOut(PrintStream out)

重新分配“標(biāo)準(zhǔn)”輸出流。

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

相關(guān)文章

  • java實(shí)現(xiàn)異步線程,回調(diào)接口方式

    java實(shí)現(xiàn)異步線程,回調(diào)接口方式

    這篇文章主要介紹了java實(shí)現(xiàn)異步線程,回調(diào)接口方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java.text.DecimalFormat類十進(jìn)制格式化

    java.text.DecimalFormat類十進(jìn)制格式化

    這篇文章主要為大家詳細(xì)介紹了java.text.DecimalFormat類十進(jìn)制格式化的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合

    Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多個(gè)數(shù)組間的排列組合,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • mvc架構(gòu)實(shí)現(xiàn)商品的購(gòu)買(mǎi)(二)

    mvc架構(gòu)實(shí)現(xiàn)商品的購(gòu)買(mǎi)(二)

    這篇文章主要為大家詳細(xì)介紹了mvc架構(gòu)實(shí)現(xiàn)商品購(gòu)買(mǎi)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Spring中的@Transactional注解使用詳解

    Spring中的@Transactional注解使用詳解

    這篇文章主要介紹了Spring中的@Transactional注解使用詳解,@Transactional 是一個(gè)注解,用于在 Spring 框架中管理事務(wù)的聲明式事務(wù)管理機(jī)制,它可以應(yīng)用于方法或類級(jí)別,并指示方法或類在執(zhí)行時(shí)應(yīng)該被包裝在一個(gè)事務(wù)中,需要的朋友可以參考下
    2024-01-01
  • springboot常用的請(qǐng)求參數(shù)的接收方式

    springboot常用的請(qǐng)求參數(shù)的接收方式

    在Spring?Boot中,接收請(qǐng)求參數(shù)的方式有多種,這篇文章主要為大家整理了9個(gè)常用的方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例

    SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java集成郵箱驗(yàn)證找回密碼功能全過(guò)程

    Java集成郵箱驗(yàn)證找回密碼功能全過(guò)程

    這篇文章主要給大家介紹了關(guān)于Java集成郵箱驗(yàn)證找回密碼功能的相關(guān)資料,通過(guò)演示效果驗(yàn)證功能的正確性,并總結(jié)了整個(gè)流程,在實(shí)際應(yīng)用中還需要將驗(yàn)證碼存入Redis并設(shè)置有效時(shí)間,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • springboot如何忽略接收請(qǐng)求中的參數(shù)

    springboot如何忽略接收請(qǐng)求中的參數(shù)

    這篇文章主要介紹了springboot如何忽略接收請(qǐng)求中的參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring Cloud 如何保證微服務(wù)內(nèi)安全

    Spring Cloud 如何保證微服務(wù)內(nèi)安全

    這篇文章主要介紹了Spring Cloud 如何保證微服務(wù)內(nèi)安全的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

新源县| 吉安县| 泌阳县| 青州市| 普定县| 澄迈县| 鲜城| 分宜县| 和平县| 千阳县| 太谷县| 肥城市| 玉林市| 广南县| 泾阳县| 肇庆市| 资中县| 汶川县| 平乡县| 香河县| 新宾| 和林格尔县| 咸阳市| 兴文县| 鱼台县| 凌源市| 察雅县| 梧州市| 滨海县| 新平| 城固县| 泸溪县| 宁阳县| 鄯善县| 璧山县| 南靖县| 岢岚县| 龙门县| 七台河市| 永修县| 土默特右旗|