??博客主頁(yè):?【小扳_-CSDN博客】
?感謝大家點(diǎn)贊??收藏?評(píng)論?
文章目錄
? ? ? ? 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 。
? ? ? ? 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é)果:
? ? ? ? 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é)果:
? ? ? ? 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é)果:
? ? ? ? 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é)果:
? ? ? ? 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é)流中。
轉(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é)果:
????????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)容。
? ? ? ? 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é)果:
? ? ? ? 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é)果:
補(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é)果:
? ? ? ? 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ù)類型。
? ? ? ? 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é)果:
? ? ? ? 需要注意的是:這是正常的情況而不是亂碼,這是一個(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é)果:
? ? ? ? 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é)果:
? ? ? ? 注意:以上的情況不是出現(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é)果:
????????假設(shè):需求進(jìn)行序列化的時(shí)候,不能將密碼進(jìn)行序列化操作,則可以用 transient 修飾成員變量。
? ? ? ? 這樣就序列化的時(shí)候,不會(huì)將密碼這個(gè)成員變量進(jìn)行序列化操作。
代碼演示:
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é)果:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-861610.html
文章來(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)!