国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流)

這篇具有很好參考價(jià)值的文章主要介紹了JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??博客主頁(yè):?【小扳_-CSDN博客】
?感謝大家點(diǎn)贊??收藏?評(píng)論?

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

文章目錄

? ? ? ? 1.0 緩沖流概述

? ? ? ? 1.1 緩沖流的工作原理

? ? ? ? 1.2 使用緩沖流的步驟

? ? ? ? 1.3?字節(jié)緩沖流于字符緩沖流的區(qū)別

? ? ? ? 1.4?字節(jié)緩沖流的實(shí)例

? ? ? ? 1.5?字符緩沖流的實(shí)例

? ? ? ? 2.0 轉(zhuǎn)換流概述

????????2.1 字符輸入轉(zhuǎn)換流的實(shí)例( InputStreamReader 類)

????????2.2 字符輸出轉(zhuǎn)化流的實(shí)例(OutputStreamWriter 類)

? ? ? ? 3.0 打印流概述

? ? ? ? 3.1 字節(jié)打印流(PrintStream 類)

? ? ? ? 3.2 字符打印流(PrintWrite 類)

? ? ? ? 4.0 數(shù)據(jù)流概述

? ? ? ? 4.1 數(shù)據(jù)輸出流(DataOutputStream 類)

? ? ? ? 4.2 數(shù)據(jù)輸入流(DataInputStream 類)

? ? ? ? 5.0 序列化流概述

? ? ? ? 5.1 對(duì)象字節(jié)輸出流(ObjectOutputStream 類)

? ? ? ? 5.2 對(duì)象字節(jié)輸入流(ObjectInputStream 類)


? ? ? ? 1.0 緩沖流概述

????????緩沖流(Buffered Stream)來(lái)提高 I/O 操作的效率,緩沖流是對(duì)字節(jié)流和字符流的一種封裝,通過(guò)緩沖區(qū)來(lái)減少 I/O 操作的次數(shù),從而提高程序的運(yùn)行效率。緩沖流的實(shí)現(xiàn)類有 BufferedInputStream、BufferedOutputStream、BufferedReader 和 BufferedWriter 。

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 1.1 緩沖流的工作原理

????????在讀取數(shù)據(jù)時(shí),緩沖流會(huì)將數(shù)據(jù)先讀入緩沖區(qū),等到緩沖區(qū)滿或者達(dá)到一定條件時(shí),再將緩沖區(qū)中的數(shù)據(jù)一次性寫入到目標(biāo)設(shè)備中;在寫入數(shù)據(jù)時(shí),緩沖流會(huì)將數(shù)據(jù)先寫入緩沖區(qū),等到緩沖區(qū)滿或者達(dá)到一定條件時(shí),再將緩沖區(qū)中的數(shù)據(jù)一次性寫入到目標(biāo)設(shè)備中。

? ? ? ? 1.2 使用緩沖流的步驟

? ? ? ? 1)創(chuàng)建字節(jié)流或者字符流對(duì)象。

? ? ? ? 2)將字節(jié)流或字符流對(duì)象作為參數(shù)創(chuàng)建緩沖流對(duì)象。

? ? ? ? 3)通過(guò)緩沖流對(duì)象進(jìn)行數(shù)據(jù)讀取獲取寫入操作

? ? ? ? 4)關(guān)閉緩沖流對(duì)象,同時(shí)會(huì)自動(dòng)關(guān)閉底層的字節(jié)流或字符流對(duì)象。

? ? ? ? 1.3?字節(jié)緩沖流于字符緩沖流的區(qū)別

? ? ? ? 1)字節(jié)緩沖流會(huì)在內(nèi)存中分配一個(gè)大小為 8 KB 的緩沖區(qū)來(lái)存儲(chǔ)數(shù)據(jù)。這個(gè)緩沖區(qū)會(huì)在讀取或?qū)懭霐?shù)據(jù)時(shí)起到緩沖作用,減少對(duì)底層輸入流或輸出流的直接訪問(wèn),提高讀寫效率。

? ? ? ? 2)字符緩沖流會(huì)在內(nèi)存中分配 8K(8192)的字符緩沖池,可以提高字符輸入流讀取字符數(shù)據(jù)的性能。

? ? ? ? 3)字符緩沖流特有方法:

????????public String readLine() throws IOException:讀取一行字符數(shù)據(jù),以換行符為結(jié)束標(biāo)志,返回讀取的字符串(不包括換行符)。

????????public void newLine() throws IOException:寫入一個(gè)換行符,根據(jù)系統(tǒng)的換行符規(guī)范來(lái)寫入換行符。

? ? ? ? 1.4?字節(jié)緩沖流的實(shí)例

????????1)字節(jié)輸出緩沖流來(lái)進(jìn)行寫文件操作

代碼如下:

import java.io.*;

public class BufferedOut {
    public static void main(String[] args) throws IOException {
        OutputStream os = new FileOutputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_25\\src\\MyIO\\Text.text");
        //將低級(jí)流轉(zhuǎn)化為高級(jí)流
        BufferedOutputStream bos = new BufferedOutputStream(os);
        bos.write('a');
        bos.write('b');
        bos.write('c');
        bos.write('d');
        bos.write('f');
        bos.write('g');

        //關(guān)閉高級(jí)流,系統(tǒng)就會(huì)自動(dòng)關(guān)閉低級(jí)流
        bos.close();
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 2)字節(jié)輸入緩沖流來(lái)進(jìn)行讀文件操作

代碼如下:

import java.io.*;

public class BufferedIs {
    public static void main(String[] args) throws IOException {
        InputStream is = new FileInputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_25\\src\\MyIO\\Text.text");
        //將低級(jí)流轉(zhuǎn)化為高級(jí)流
        BufferedInputStream bis = new BufferedInputStream(is);
        int len;
        while ((len = bis.read()) != -1){
            System.out.print((char) len);
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 1.5?字符緩沖流的實(shí)例

? ? ? ? 1)字符輸出緩沖流來(lái)進(jìn)行寫文件操作。

代碼如下:

import java.io.*;

public class BufferedW {
    public static void main(String[] args) throws IOException {
        //先創(chuàng)建字符流(低級(jí)流)
        Writer writer = new FileWriter("D:\\software\\code\\2023_java\\2023_java_code\\code_24_25\\src\\MyIO\\Text.text");
        //將低級(jí)流轉(zhuǎn)化為高級(jí)流
        BufferedWriter bw = new BufferedWriter(writer);
        //開(kāi)始寫文件操作
        bw.write("字符緩沖流內(nèi)部的緩沖區(qū)大小通常是比較合適的,一般在 8 KB 到 16 KB 之間。");
        //刷新數(shù)據(jù)
        bw.flush();
        //換行操作
        bw.newLine();
        bw.write("這個(gè)大小是經(jīng)過(guò)實(shí)際測(cè)試和性能優(yōu)化的,能夠在提高讀寫效率的同時(shí),又不會(huì)占用過(guò)多的內(nèi)存。");
        //操作完畢之后,需要關(guān)閉資源,關(guān)閉高級(jí)流,低級(jí)流也會(huì)自動(dòng)關(guān)閉的。
        bw.close();
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 2)字符輸入緩沖流進(jìn)行將文件的內(nèi)容進(jìn)行打印

代碼如下:

import java.io.*;

public class BufferedR {
    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader("D:\\software\\code\\2023_java\\2023_java_code\\code_24_25\\src\\MyIO\\Text.text");
        BufferedReader br = new BufferedReader(reader);

        //開(kāi)始讀文件操作
        String len;
        while ((len = br.readLine()) != null){
            System.out.println(len);
        }
        //結(jié)束程序需要關(guān)閉資源
        br.close();
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 2.0 轉(zhuǎn)換流概述

????????在 Java 中,字符流和字節(jié)流之間存在著轉(zhuǎn)換的需求。字符流用于處理文本數(shù)據(jù),而字節(jié)流用于處理二進(jìn)制數(shù)據(jù)。轉(zhuǎn)換流提供了 InputStreamReader 和 OutputStreamWriter 兩個(gè)類,用于將字節(jié)流轉(zhuǎn)換為字符流或?qū)⒆址鬓D(zhuǎn)換為字節(jié)流。

????????InputStreamReader 類從字節(jié)流中讀取數(shù)據(jù),并根據(jù)指定的字符編碼將字節(jié)數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù);OutputStreamWriter 類將字符數(shù)據(jù)按照指定的字符編碼轉(zhuǎn)換為字節(jié)數(shù)據(jù)并寫入到字節(jié)流中。

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

轉(zhuǎn)換流的主要作用包括:

? ? ? ? 1)字節(jié)流和字符流之間的轉(zhuǎn)換:轉(zhuǎn)換流可以方便地將字節(jié)流轉(zhuǎn)換為字符流,或?qū)⒆址鬓D(zhuǎn)換為字節(jié)流。

? ? ? ? 2)字符編碼和解碼:轉(zhuǎn)換流可以指定字符編碼,用于將字節(jié)數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)或?qū)⒆址麛?shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)據(jù)。

? ? ? ? 3)處理文本數(shù)據(jù):轉(zhuǎn)換流通常用于處理文本數(shù)據(jù),提供了更方便的字符操作方法。

????????2.1 字符輸入轉(zhuǎn)換流的實(shí)例( InputStreamReader 類)

? ? ? ? 簡(jiǎn)單來(lái)說(shuō),InputStreamReader 將讀取的字節(jié)流轉(zhuǎn)化為字符流,并且如果讀取的是用 GBK 編碼集進(jìn)行編碼的,在 UTF 環(huán)境下進(jìn)行編碼時(shí),則需要指定用 GBK 編碼集進(jìn)行編碼。

代碼如下:

import java.io.*;

public class demo1 {
    public static void main(String[] args) throws FileNotFoundException {
        try(InputStream inputStream = new FileInputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\ExchangeStreams\\Text");

            //將讀取的文件字節(jié)流轉(zhuǎn)化為字符流,并指定用GBK編碼集進(jìn)行編碼
            Reader inputStreamReader = new InputStreamReader(inputStream,"GBK");
            //再將其轉(zhuǎn)化為緩沖流
            BufferedReader br = new BufferedReader(inputStreamReader);
        ){
            String str;
            while ((str = br.readLine()) != null){
                System.out.println(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

????????2.2 字符輸出轉(zhuǎn)化流的實(shí)例(OutputStreamWriter 類)

? ? ? ? 簡(jiǎn)單來(lái)說(shuō),把原始的字節(jié)輸出流,按照指定的字符集編碼轉(zhuǎn)換成字符輸出轉(zhuǎn)換流。就是將字節(jié)輸出流轉(zhuǎn)換為字符輸出流,并且按指定的編碼集編碼輸出。

代碼如下:

import java.io.*;

public class demo2 {
    public static void main(String[] args) {
        try(OutputStream outputStream = new FileOutputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\ExchangeStreams\\T");
            //將字節(jié)輸出流轉(zhuǎn)化為字符輸出轉(zhuǎn)換流
            Writer osw = new OutputStreamWriter(outputStream,"GBK");
            //再將字符輸出轉(zhuǎn)化流升級(jí)為緩沖流
            BufferedWriter bw = new BufferedWriter(osw);
        ) {
            bw.write("在這個(gè)美麗的世界里,每一天都是新的開(kāi)始。陽(yáng)光灑在大地上,微風(fēng)拂過(guò)臉龐,讓人感受到生命的美好。");
            bw.newLine();
            bw.write("無(wú)論遇到怎樣的困難和挑戰(zhàn),我們都要勇敢面對(duì),堅(jiān)定前行。生活充滿了無(wú)限可能,讓我們抓住每一個(gè)機(jī)會(huì),追逐自己的夢(mèng)想。");
            bw.newLine();
            bw.write("愿每個(gè)人都能擁有快樂(lè)與幸福,享受生活的點(diǎn)滴美好。");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

? ? ? ? 3.0 打印流概述

????????打印流 :PrintStream 和 PrintWriter 是 Java I/O 中的高級(jí)流,用于將各種數(shù)據(jù)類型格式化并輸出到目標(biāo)設(shè)備,如控制臺(tái)、文件或網(wǎng)絡(luò)連接。PrintStream 和 PrintWriter 提供了方便的方法來(lái)輸出各種數(shù)據(jù)類型,包括基本數(shù)據(jù)類型、字符串、對(duì)象等。

? ? ? ? 簡(jiǎn)單來(lái)說(shuō):打印什么內(nèi)容,就會(huì)輸出什么內(nèi)容。

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 3.1 字節(jié)打印流(PrintStream 類)

構(gòu)造方法:

? ? ? ? 1)public PrintStream(OutputStream/File/String):打印流直接通向字節(jié)輸出流/文件/文件路徑。

? ? ? ? 2)public PrintStream(String fileName,Charset charset):可以指定寫出去的字符編碼。

? ? ? ? 3)public PrintStream(OutputStream out,boolean autoFlush):可以指定實(shí)現(xiàn)自動(dòng)刷新。

? ? ? ? 4)public PrintStream(OutputStream out,boolean autoFlush,String encoding):可以指定實(shí)現(xiàn)自動(dòng)刷新,并可指定字符的編碼。

常用的方法:

? ? ? ? 1)public void println(xxx):打印任意類型的數(shù)據(jù)出去。

? ? ? ? 2)public void write(int / byte[] / byte[] 一部分):可以支持寫字節(jié)數(shù)據(jù)出去。

代碼演示:

import java.io.IOException;
import java.io.PrintStream;

public class MyPrintStream {
    public static void main(String[] args) {
        try(PrintStream printStream = new PrintStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Print\\TT")
        ){
            //打印啥就會(huì)輸出啥
            printStream.println(111);
            printStream.println( );
            printStream.println('A');
            printStream.println("你好世界");
            printStream.println("你好小鴨");
            printStream.println();
            printStream.println("你好小扳");

            //支持輸出字節(jié)數(shù)據(jù)
            printStream.write(98);
            printStream.write('A');
            printStream.write("你好小狗".getBytes());

        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 3.2 字符打印流(PrintWrite 類)

構(gòu)造方法:

? ? ? ? 1)public PrintWrite(OutputStream/File/String/Write):打印流直接通向字節(jié)輸出流/文件/文件路徑/字符輸出流。

? ? ? ? 2)public PrintWrite(String fileName,Charset charset):可以指定寫出去的字符編碼。

? ? ? ? 3)public PrintWrite(OutputStream out/Write,boolean autoFlush):可以指定實(shí)現(xiàn)自動(dòng)刷新。

? ? ? ? 4)public PrintWrite(OutputStream out,boolean autoFlush,String encoding):可以指定實(shí)現(xiàn)自動(dòng)刷新,并可指定字符的編碼。

常用的方法:

? ? ? ? 1)public void println(xxx):打印任意類型的數(shù)據(jù)出去,打印什么就輸出什么內(nèi)容。

? ? ? ? 2)public void write(int/String/char[]/...):可以支持寫字符數(shù)據(jù)出去。

代碼演示:

import java.io.IOException;
import java.io.PrintWriter;

public class MyPrintWrite {
    public static void main(String[] args) {
        try(PrintWriter printWriter = new PrintWriter("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Print\\TT")){
            printWriter.println(1);
            printWriter.println("你好鴨小鴨");
            printWriter.println("你好鴨小貓");
            printWriter.println("你好鴨小狗");
            printWriter.println();
            printWriter.println("A");
            printWriter.println('a');
            printWriter.println("你好鴨小板");

            //還支持字符輸入流
            printWriter.write(98);
            printWriter.write("A");
            printWriter.write("你好鴨小童");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

補(bǔ)充:如果需要追加數(shù)據(jù),則需要用到低級(jí)流對(duì)象作為高級(jí)流的參數(shù),低級(jí)流構(gòu)造器中第二個(gè)參數(shù) true 可以實(shí)現(xiàn)數(shù)據(jù)追加。

代碼如下:

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class MyPrintWrite {
    public static void main(String[] args) {
        try(PrintWriter printWriter = new PrintWriter(new FileWriter("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Print\\TT",true))){
            printWriter.println(1);
            printWriter.println("你好鴨小鴨");
            printWriter.println("你好鴨小貓");
            printWriter.println("你好鴨小狗");
            printWriter.println();
            printWriter.println("A");
            printWriter.println('a');
            printWriter.println("你好鴨小板");

            //還支持字符輸入流
            printWriter.write(98);
            printWriter.write("A");
            printWriter.write("你好鴨小童");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 4.0 數(shù)據(jù)流概述

????????數(shù)據(jù)流是 Java I/O 中的一種特殊流,用于讀取或?qū)懭朐紨?shù)據(jù)類型(如 int、double、char 等)而不是字節(jié)或字符。數(shù)據(jù)流提供了方便的方法來(lái)讀取和寫入基本數(shù)據(jù)類型,避免了手動(dòng)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的繁瑣工作。

????????在 Java 中,數(shù)據(jù)流主要包括 DataInputStream 和 DataOutputStream。它們分別是字節(jié)數(shù)據(jù)流和字符數(shù)據(jù)流的裝飾器,可以包裝其他輸入流或輸出流,以便讀取或?qū)懭牖緮?shù)據(jù)類型。

????????適用于網(wǎng)絡(luò)通信和文件操作:數(shù)據(jù)流常用于網(wǎng)絡(luò)通信和文件操作中,方便地讀取和寫入基本數(shù)據(jù)類型。

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 4.1 數(shù)據(jù)輸出流(DataOutputStream 類)

構(gòu)造方法:

????????public DataOutputStream(OutputStream out):創(chuàng)建新數(shù)據(jù)輸出包裝基礎(chǔ)的字節(jié)輸出流。

常用的方法:

? ? ? ? 1)public final void writeByte(byte?v):將 byte 類型的數(shù)據(jù)寫入基礎(chǔ)的字節(jié)輸出流。

? ? ? ? 2)public final void writeInt(int v):將 int 類型的數(shù)據(jù)寫入基礎(chǔ)的字節(jié)輸出流。

? ? ? ? 3)public final void writeDouble(Double v):將 double 類型的數(shù)據(jù)寫入基礎(chǔ)的字節(jié)輸出流。

? ? ? ? 4)public final void writeUTF(String str):將字符串?dāng)?shù)據(jù)以 UTF-8 編碼成字節(jié)寫入基礎(chǔ)的字節(jié)輸出流。

? ? ? ? 5)public void write(int/byte[]/byte[] 一部分):支持寫字節(jié)數(shù)據(jù)出去。

代碼演示:

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class MyDataInOutStream {
    public static void main(String[] args) {
        //先創(chuàng)建低級(jí)輸出流
        try(OutputStream os = new FileOutputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Data\\DataText");
            //再繼續(xù)轉(zhuǎn)化為高級(jí)流
            DataOutputStream dos = new DataOutputStream(os);
        ){
            dos.writeByte(1);
            dos.writeInt(333);
            dos.writeDouble(333.01);
            dos.writeUTF("你好鴨小蜜蜂!!!!");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 需要注意的是:這是正常的情況而不是亂碼,這是一個(gè)特殊的存儲(chǔ)方法,可以理解為將類型和內(nèi)容進(jìn)行了“打包”。主要是為了,方便取數(shù)據(jù)而不是給程序員看的。

? ? ? ? 4.2 數(shù)據(jù)輸入流(DataInputStream 類)

? ? ? ? 用于讀取數(shù)據(jù)輸出流寫出去的數(shù)據(jù)。注意讀取的順序應(yīng)該跟寫數(shù)據(jù)的順序保持一致。

構(gòu)造方法:

? ? ? ? public DataInputStream(InputStream is):創(chuàng)建新數(shù)據(jù)輸入流包裝基礎(chǔ)的字節(jié)輸入流。

常用的方法:

? ? ? ? 1)public final byte readByte():讀取字節(jié)數(shù)據(jù)返回。

? ? ? ? 2)public final int readInt():讀取 int 類型的數(shù)據(jù)返回。

? ? ? ? 3)public final double readDouble():讀取 double 類型的數(shù)據(jù)返回。

? ? ? ? 4)public final String readUTF():讀取字符串(UTF-8)數(shù)據(jù)返回。

? ? ? ? 5)public int read(byte[]):支持字節(jié)數(shù)據(jù)進(jìn)來(lái)。

代碼演示:

import java.io.*;

public class MyDataInputStream {
    public static void main(String[] args) {
        try(InputStream inputStream = new FileInputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Data\\DataText");
            DataInputStream dis = new DataInputStream(inputStream);
        ){
            byte b = dis.readByte();
            System.out.println(b);
            int i = dis.readInt();
            System.out.println(i);
            double dl = dis.readDouble();
            System.out.println(dl);
            String str = dis.readUTF();
            System.out.println(str);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 5.0 序列化流概述

????????序列化流是 Java I/O 中的一種特殊流,用于將對(duì)象轉(zhuǎn)換為字節(jié)序列以便存儲(chǔ)或傳輸,或?qū)⒆止?jié)序列轉(zhuǎn)換回對(duì)象。序列化流主要用于實(shí)現(xiàn)對(duì)象的持久化存儲(chǔ)和網(wǎng)絡(luò)傳輸。

????????在 Java 中,常用的序列化流包括 ObjectOutputStream 和 ObjectInputStream。它們可以分別用于將對(duì)象寫入輸出流并序列化為字節(jié)流,以及從輸入流中讀取字節(jié)流并反序列化為對(duì)象。

特點(diǎn):

????????將對(duì)象轉(zhuǎn)換為字節(jié)序列:序列化流可以將 Java 對(duì)象轉(zhuǎn)換為字節(jié)序列,以便存儲(chǔ)在文件中或通過(guò)網(wǎng)絡(luò)傳輸。

????????反序列化:序列化流也可以將字節(jié)序列反序列化為對(duì)象,恢復(fù)對(duì)象的狀態(tài)。

? ? ? ? 注意:對(duì)象如果需要序列化,必須實(shí)現(xiàn)序列化接口(?Serializable?)。

? ? ? ? 5.1 對(duì)象字節(jié)輸出流(ObjectOutputStream 類)

? ? ? ? 可以把 Java 對(duì)象進(jìn)行序列化,把 Java 對(duì)象存入到文件中去。

構(gòu)造方法:

? ? ? ? public ObjectOutputStream(OutputStream out):創(chuàng)建對(duì)象字節(jié)輸出流,包裝基礎(chǔ)的字節(jié)輸出流。

常用方法:

? ? ? ? public final void writeObject(Object o):把對(duì)象寫出去。

代碼演示:

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

public class MyObjectOutputStream {
    public static void main(String[] args) {
        try(//先創(chuàng)建一個(gè)低級(jí)輸出流
            OutputStream os = new FileOutputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Object\\ObjectText");
            //創(chuàng)建序列化流
            ObjectOutputStream oos = new ObjectOutputStream(os);
            ){
            //將用戶對(duì)象寫入到文件中
            User user = new User("小蜜蜂","001",18,"123456");
            oos.writeObject(user);
            System.out.println("序列化創(chuàng)建成功!!!");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

? ? ? ? 注意:以上的情況不是出現(xiàn)亂碼,是屬于正常情況。將對(duì)象寫進(jìn)文件中,不是給人看的,為了方便取數(shù)據(jù)。

? ? ? ? 5.2 對(duì)象字節(jié)輸入流(ObjectInputStream 類)

? ? ? ? 把 Java 對(duì)象進(jìn)行反序列化:把存儲(chǔ)再文件中的 Java 對(duì)象讀入到內(nèi)存中來(lái)。

構(gòu)造方法:

? ? ? ? public ObjectInputStream(InputStream is):創(chuàng)建對(duì)象字節(jié)輸入流,包裝基礎(chǔ)的字節(jié)輸入流。

常用的方法:

? ? ? ? public final Object readObject():把存儲(chǔ)在文件中的 Java 對(duì)象讀出來(lái)。

代碼演示:

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class MyObjectInputStream {
    public static void main(String[] args) {
        try(
            //低級(jí)輸出流//再利用低級(jí)流作為參數(shù)來(lái)創(chuàng)建對(duì)象輸出流
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Object\\ObjectText"));){
            User user = (User) ois.readObject();
            //將對(duì)象進(jìn)行輸出
            System.out.println(user);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

????????假設(shè):需求進(jìn)行序列化的時(shí)候,不能將密碼進(jìn)行序列化操作,則可以用 transient 修飾成員變量。

? ? ? ? 這樣就序列化的時(shí)候,不會(huì)將密碼這個(gè)成員變量進(jìn)行序列化操作。

代碼演示:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

public class MyObjectOutputStream {
    public static void main(String[] args) {
        try(//先創(chuàng)建一個(gè)低級(jí)輸出流
            OutputStream os = new FileOutputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Object\\ObjectText");
            //創(chuàng)建序列化流
            ObjectOutputStream oos = new ObjectOutputStream(os);
            ){
            //將用戶對(duì)象寫入到文件中
            User user = new User("小蜜蜂","001",18,"123456");
            oos.writeObject(user);
            System.out.println("序列化創(chuàng)建成功!!!");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class MyObjectInputStream {
    public static void main(String[] args) {
        try(
            //低級(jí)輸出流//再利用低級(jí)流作為參數(shù)來(lái)創(chuàng)建對(duì)象輸出流
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_26\\src\\Object\\ObjectText"));){
            User user = (User) ois.readObject();
            //將對(duì)象進(jìn)行輸出
            System.out.println(user);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

運(yùn)行結(jié)果:

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言

JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流),JavaEE 初級(jí)篇,網(wǎng)絡(luò),java-ee,java,大數(shù)據(jù),安全,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861610.html

到了這里,關(guān)于JavaEE 初階篇-深入了解 I/O 高級(jí)流(緩沖流、交換流、數(shù)據(jù)流和序列化流)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaEE 初階篇-深入了解多線程安全問(wèn)題(指令重排序、解決內(nèi)存可見(jiàn)性與等待通知機(jī)制)

    JavaEE 初階篇-深入了解多線程安全問(wèn)題(指令重排序、解決內(nèi)存可見(jiàn)性與等待通知機(jī)制)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? 文章目錄 ? ? ? ? 1.0 指令重排序概述 ? ? ? ? 1.1 指令重排序主要分為兩種類型 ? ? ? ? 1.2 指令重排序所引發(fā)的問(wèn)題 ? ? ? ? 2.0 內(nèi)存可見(jiàn)性概述 ? ? ? ? 2.1 導(dǎo)致內(nèi)存可見(jiàn)性問(wèn)題主要涉及兩個(gè)方面 ? ? ?

    2024年04月15日
    瀏覽(23)
  • JavaEE 初階篇-深入了解 CAS 機(jī)制與12種鎖的特征(如樂(lè)觀鎖和悲觀鎖、輕量級(jí)鎖與重量級(jí)鎖、自旋鎖與掛起等待鎖、可重入鎖與不可重入鎖等等)

    JavaEE 初階篇-深入了解 CAS 機(jī)制與12種鎖的特征(如樂(lè)觀鎖和悲觀鎖、輕量級(jí)鎖與重量級(jí)鎖、自旋鎖與掛起等待鎖、可重入鎖與不可重入鎖等等)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? 文章目錄 ? ? ? ? 1.0 樂(lè)觀鎖與悲觀鎖概述 ? ? ? ? 1.1 悲觀鎖(Pessimistic Locking) ? ? ? ? 1.2 樂(lè)觀鎖(Optimistic Locking) ? ? ? ? 1.3 區(qū)別與適用場(chǎng)景 ? ? ? ? 2.0 輕量級(jí)鎖與重量級(jí)鎖概述 ? ? ? ? 2.1 真正加

    2024年04月16日
    瀏覽(41)
  • JavaEE 初階篇-生產(chǎn)者與消費(fèi)者模型(線程通信)

    JavaEE 初階篇-生產(chǎn)者與消費(fèi)者模型(線程通信)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? ? 文章目錄 ? ? ? ? 1.0 生產(chǎn)者與消費(fèi)者模型概述 ? ? ? ? 2.0?在生產(chǎn)者與消費(fèi)者模型中涉及的關(guān)鍵概念 ? ? ? ? 2.1 緩沖區(qū) ? ? ? ? 2.2 生產(chǎn)者 ? ? ? ? 2.3 消費(fèi)者 ? ? ? ? 2.4 同步機(jī)制 ? ? ? ? 2.5 線程間通

    2024年04月28日
    瀏覽(31)
  • JavaEE 初階篇-線程安全的集合類、多線程環(huán)境使用 ArrayList、隊(duì)列、哈希表(HashMap 、ConCurrentHashMap 、HashTable 的區(qū)別)

    JavaEE 初階篇-線程安全的集合類、多線程環(huán)境使用 ArrayList、隊(duì)列、哈希表(HashMap 、ConCurrentHashMap 、HashTable 的區(qū)別)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? ? 文章目錄 ? ? ? ? 1.0 線程安全的集合類 ? ? ? ? 1.2?線程安全的集合類 - Vector ? ? ? ? 1.3 線程安全的集合類 - Stack ? ? ? ? 1.4 線程安全的集合類 - HashTable ? ? ? ? 2.0 多線程環(huán)境使用 ArrayList ? ? ? ?

    2024年04月25日
    瀏覽(59)
  • 【JavaEE初階】了解JVM

    【JavaEE初階】了解JVM

    JVM啟動(dòng)的時(shí)候,會(huì)申請(qǐng)到一整個(gè)很大的內(nèi)存區(qū)域.JVM是一個(gè)應(yīng)用程序,要從操作系統(tǒng)里申請(qǐng)內(nèi)存.JVM就根據(jù)需要,把空間分為幾個(gè)部分,每個(gè)部分各自有不同的功能.具體劃分如下: Native Method Stacks(本地方法棧) :native表示是JVM內(nèi)部的C++代碼.就是給調(diào)用native方法(JVM內(nèi)部的方法)準(zhǔn)備的棧空

    2024年02月13日
    瀏覽(25)
  • 了解JVM(JavaEE初階系列19)

    了解JVM(JavaEE初階系列19)

    目錄 前言: 1.JVM是如何運(yùn)行的 2.JVM中的內(nèi)存區(qū)域劃分 3.JVM的類加載機(jī)制 3.1JVM加載機(jī)制的五大步驟 3.1.1加載 3.1.1驗(yàn)證 3.1.1準(zhǔn)備 3.1.1解析 3.1.1初始化 3.2總結(jié) 3.3JVM啟動(dòng)時(shí)機(jī) 3.4雙親委派模型 4.JVM中的垃圾回收策略 4.1JVM垃圾回收機(jī)制概念 4.2垃圾回收策略 4.2.1判斷引用是否有指向 4

    2024年02月10日
    瀏覽(39)
  • 【JavaEE】深入了解Spring中Bean的可見(jiàn)范圍(作用域)以及前世今生(生命周期)

    【JavaEE】深入了解Spring中Bean的可見(jiàn)范圍(作用域)以及前世今生(生命周期)

    【JavaEE】Spring的開(kāi)發(fā)要點(diǎn)總結(jié)(4) 在學(xué)習(xí)Spring中,Bean是最核心的操作資源 使用學(xué)習(xí)Bean對(duì)象是一個(gè)重點(diǎn),我們已經(jīng)知道如何存儲(chǔ)它,獲取它,現(xiàn)在我們要知道: 它的作用域,我們才可以知道怎么使用,才能得心應(yīng)手,符合預(yù)期~ 它的生命周期,我們才能更加清楚的了解它的

    2024年02月14日
    瀏覽(26)
  • 【C語(yǔ)言初階篇】for語(yǔ)句的基本語(yǔ)法和使用規(guī)則!

    【C語(yǔ)言初階篇】for語(yǔ)句的基本語(yǔ)法和使用規(guī)則!

    ?? 鴿芷咕 :個(gè)人主頁(yè) ??? 個(gè)人專欄 :《C語(yǔ)言初階篇》 《C語(yǔ)言進(jìn)階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好啊,前面給大家詳細(xì)介紹了while語(yǔ)句但是它也是有缺點(diǎn)的,所以我們就有了更好的語(yǔ)法for! ?? ?? 那么今天我們就介紹一下

    2024年02月14日
    瀏覽(24)
  • 深入了解PostgreSQL:高級(jí)查詢和性能優(yōu)化技巧

    在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的世界中,數(shù)據(jù)庫(kù)的性能和查詢優(yōu)化變得尤為重要。 POSTGRESQL作為一種開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在處理大規(guī)模數(shù)據(jù)和復(fù)雜查詢時(shí)表現(xiàn)出色。 但隨著數(shù)據(jù)量和查詢復(fù)雜性的增加,性能問(wèn)題可能會(huì)顯現(xiàn)出來(lái)。 本文將深入探討POSTGRESQL的高級(jí)查詢和性能優(yōu)化技

    2024年02月10日
    瀏覽(33)
  • 【C語(yǔ)言初階篇】scanf和getchar中緩存區(qū)的概念!

    【C語(yǔ)言初階篇】scanf和getchar中緩存區(qū)的概念!

    ?? 鴿芷咕 :個(gè)人主頁(yè) ??? 個(gè)人專欄 :《C語(yǔ)言初階篇》 《C語(yǔ)言進(jìn)階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好啊,相信大家都多多少少了用過(guò)scanf和getchar()語(yǔ)句吧,但是關(guān)于緩存區(qū)的概念,我相信大多數(shù)人都沒(méi)有聽(tīng)說(shuō)過(guò)吧。 ?? ?? 寫

    2024年02月14日
    瀏覽(46)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包