JavaIO流:案例

java.io 包下需要掌握的流有 16 個,本篇內容包括:java.io包下需要掌握的流、Java IO 案例。


文章目錄

    • 一、java.io包下需要掌握的流
    • 二、Java IO 案例
        • 1、Demo 1(FileInputStream)
        • 2、Demo 2(FileInputStream)
        • 3、Demo 3(FileInputStream)
        • 4、Demo 4(FileOutputStream)
        • 5、Demo5(FileInputStream & FileOutputStream完成文件的拷貝)
        • 6、Demo 6(FileReader)
        • 7、Demo 7(FileWriter)
        • 8、Demo 8(FileReader & FileWriter 完成對文件的拷貝)
        • 9、Demo 9(BufferedReader)
        • 10、Demo 10(BufferedReader)
        • 11、Demo 11(BufferedWriter)
        • 12、Demo 12(DataOuputStream)
        • 13、Demo 13(DataInputStream)
        • 14、Demo 14(PrintStream)
        • 15、Demo 15(I/O流聯合Properties屬性類使用)
        • 16、Demo 16(File)


一、java.io包下需要掌握的流

java.io 包下需要掌握的流有 16 個:

# 文件專屬:

  • java.io.FileInputStream
  • java.io.FileOutputStream
  • java.io.FileReader
  • java.io.FileWriter

# 轉換流:(將字節流轉換成字符流)

  • java.io.InputStreamReader
  • java.io.OutputStreamWriter

# 緩沖流專屬:

  • java.io.BufferedReader
  • java.io.BufferedWriter
  • java.io.BufferedInputStream
  • java.io.BufferedOutputStream

# 數據流專屬:

  • java.io.DataInputStream
  • java.io.DataOutputStream

# 標準輸出流:

  • java.io.PrintWriter
  • java.io.PrintStream

# 對象專屬流:

  • java.io.ObjectInputStream
  • java.io.ObjectOutputStream

二、Java IO 案例

1、Demo 1(FileInputStream)

import java.io.FileInputStream;
import java.io.IOException;/*** java.io.FileInputStream* 1) 文件字節輸入流、萬能的、任何類型的文件都可以采用這個流來讀* 2) 字節的方式,完成輸入(讀)的操作(磁盤 ---> 內存)* public int read() throws IOException* 該方法缺點:一次讀取一個字節byte,這樣內存和硬盤交互太頻繁,時間都耗費在交互上面了*/
public class FileInputStreamTest01 {public static void main(String[] args) {FileInputStream fis = null;try {//創建文件字節輸入流對象fis = new FileInputStream("/Users/lizhengi/test/iodemo/temp.txt");//開始讀int readData = 0;while ((readData = fis.read()) != -1) {System.out.print(readData + " ");}} catch (IOException e) {e.printStackTrace();} finally {//在finally語句塊中確保流一定關閉if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件中:abcdefg

輸出的:97 98 99 100 101 102 103

2、Demo 2(FileInputStream)

import java.io.FileInputStream;
import java.io.IOException;/*** public int read(byte[] b) throws IOException* 該方法一次最多讀取 b.length 個字節* 減少內存和硬盤之間的交互,提高程序的執行效率*/
public class FileInputStreamTest02 {public static void main(String[] args) {FileInputStream fis = null;try {//創建文件字節輸入流對象fis = new FileInputStream("/Users/lizhengi/test/iodemo/temp.txt");//開始讀,采用byte數組byte[] bytes = new byte[4];int readCount = 0;while ((readCount = fis.read(bytes)) != -1) {System.out.print(new String(bytes, 0, readCount));}} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件中:abcdefg

輸出的:abcdefg

3、Demo 3(FileInputStream)

import java.io.FileInputStream;
import java.io.IOException;/*** public int available() throws IOException* 返回此輸入流中可以讀取(或跳過)的剩余字節數量* <p>* public long skip(long n) throws IOException* 跳過輸入流中的n個字節的數據不讀*/
public class FileInputStreamTest03 {public static void main(String[] args) {FileInputStream fis = null;try {//創建文件字節輸入流對象fis = new FileInputStream("/Users/lizhengi/test/iodemo/temp.txt");//available()方法 獲取該文件中的總字節數量(此時還未讀文件,所以數量為全部字節數),存入byte數組中//該方式不是讀大文件,因為byte數組不能太大byte[] bytes = new byte[fis.available()];System.out.println("讀之前文件中還可以讀取的字節數量: " + fis.available());int readCount = fis.read(bytes);System.out.println(new String(bytes));System.out.println("讀之后文件中還可以讀取的字節數量: " + fis.available());//skip(long n)方法 跳過幾個字節不讀
//            fis.skip(3);
//            System.out.println(fis.read());} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件中::abcdefg

輸出的:

? 讀之前文件中還可以讀取的字節數量: 8

? abcdefg

? 讀之后文件中還可以讀取的字節數量: 0

4、Demo 4(FileOutputStream)

import java.io.FileOutputStream;
import java.io.IOException;/*** java.io.FileOuputStream* 1) 文件字節輸出流,負責寫* 2) 從內存 ---> 硬盤*/
public class FileOutputStreamTest01 {public static void main(String[] args) {FileOutputStream fos = null;try {//創建文件字節輸出流對象,文件不存在時會自動新建//該方法會先將原文件清空,然后重新寫入,謹慎使用!!!//fos=new FileOutputStream("F:/myfile.txt");//下面這種方法在文件末尾追加寫入,不會清空原文件內容fos = new FileOutputStream("/Users/lizhengi/test/iodemo/demo.txt", true);//開始寫byte[] bytes = {97, 98, 99, 100};fos.write(bytes);//寫完之后,最后一定記得刷新fos.flush();} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件中:abcd

5、Demo5(FileInputStream & FileOutputStream完成文件的拷貝)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** 使用 FileInputStream 和 FileOutputStream 完成對文件的復制*/
public class CopyTest01 {public static void main(String[] args) {FileInputStream fis = null;FileOutputStream fos = null;try {//創建一個文件輸入流對象fis = new FileInputStream("/Users/lizhengi/test/iodemo/temp.txt");//創建一個文件輸出流對象fos = new FileOutputStream("/Users/lizhengi/test/iodemo/demo.txt");//核心:一邊讀,一邊寫byte[] bytes = new byte[1024]; //1024B=1KB (一次最多讀1KB)int readCount = 0;while ((readCount = fis.read(bytes)) != -1) {fos.write(bytes, 0, readCount);}} catch (IOException e) {e.printStackTrace();} finally {if (fis == null) {try {assert false;fis.close();} catch (IOException e) {e.printStackTrace();}}if (fos == null) {try {assert false;fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}

輸入文件中:abcd

輸出文件中:abcd

6、Demo 6(FileReader)

import java.io.FileReader;
import java.io.IOException;/*** java.io.FileReader* 文件字符輸入流,只能讀取普通文本* 讀取普通文本時,比較方便快捷* 能用記事本編輯的都是普通文本文件*/
public class FileReaderTest {public static void main(String[] args) {FileReader reader = null;try {//創建文件字符輸入流對象reader = new FileReader("/Users/lizhengi/test/iodemo/temp.txt");//開始讀,字節對應的是byte數組,字符對應的是char數組char[] chars = new char[4]; //一次讀取4個字符int readCount = 0;while ((readCount = reader.read(chars)) != -1) {System.out.print(new String(chars, 0, readCount));}} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件中:abcdefg

輸出的:abcdefg

7、Demo 7(FileWriter)

import java.io.FileWriter;
import java.io.IOException;/*** java.io.FileWriter* 文件字符輸出流,負責寫* 只能輸出普通文本* 能用記事本編輯的都是普通文本文件*/
public class FileWriterTest {public static void main(String[] args) {FileWriter writer = null;try {//創建文件字符輸出流對象writer = new FileWriter("/Users/lizhengi/test/iodemo/temp.txt");//開始寫char[] chars = {'我', '是', '中', '國', '人'};writer.write(chars);writer.write(chars, 2, 3);writer.write("Java");//刷新writer.flush();} catch (IOException e) {e.printStackTrace();} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件中:我是中國人中國人Java

8、Demo 8(FileReader & FileWriter 完成對文件的拷貝)

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;/*** 使用 FileReader 和 FileWriter 完成對文件的復制,只能拷貝普通文本文件* 能用記事本編輯的都是普通文本文件*/
public class CopyTest02 {public static void main(String[] args) {FileReader reader = null;FileWriter writer = null;try {//讀reader = new FileReader("/Users/lizhengi/test/iodemo/temp.txt");//寫writer = new FileWriter("/Users/lizhengi/test/iodemo/demo.txt");//一邊讀一邊寫char[] chars = new char[512]; //一次讀取512字節(0.5KB)int readCount = 0;while ((readCount = reader.read(chars)) != -1) {writer.write(chars, 0, readCount);}} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}

輸入文件中:我是中國人中國人Java

輸出文件中:我是中國人中國人Java

9、Demo 9(BufferedReader)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;/*** java.io.BufferedReader* 帶有緩沖區的字符輸入流* 使用帶緩沖區的流的時候不需要自定義byte數組、char數組**/
public class BufferedReaderTest01 {public static void main(String[] args) {BufferedReader br = null;try {//當一個流的構造方法中需要另一個流的時候,內部被傳進來的流叫做 節點流//外部負責包裝的流叫做 包裝流//也就是說此時,FileReader是節點流,BufferedReader是包裝流br = new BufferedReader(new FileReader("/Users/lizhengi/test/iodemo/temp.txt"));//循環讀,一次讀一行String s = null;while ((s = br.readLine()) != null) {System.out.println(s);}} catch (IOException e) {e.printStackTrace();} finally {//關閉的時候只需要關閉包裝流即可,而里面的節點流會自動關閉(詳情見源代碼)if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件中:

? 我是中國人

? 中國人

? Java

輸出的:

? 我是中國人

? 中國人

? Java

10、Demo 10(BufferedReader)

import java.io.*;public class BufferedReaderTest02 {public static void main(String[] args) throws IOException {//最內部是 一個文件字節 輸入流//中間的是 一個字節流轉字符流 的輸入流//最外部是 一個緩沖字符 輸入流 (也就是實現了字節流 ---> 字符流)BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("/Users/lizhengi/test/iodemo/temp.txt")));//開始讀String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}//只需關閉最外部的包裝流即可br.close();}
}

文件中:

? 我是中國人

? 中國人

? Java

輸出的:

? 我是中國人

? 中國人

? Java

11、Demo 11(BufferedWriter)

import java.io.*;public class BufferedWriterTest01 {public static void main(String[] args) throws IOException {//創建一個緩沖字符輸出流//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/Users/lizhengi/test/iodemo/demo.txt")));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/Users/lizhengi/test/iodemo/demo.txt", true)));//開始寫bw.write("Hello World!!!");bw.write("\n");bw.write("Java I/O流");bw.write("\n");//刷新bw.flush();//關閉最外部的包裝流bw.close();}
}

文件中:

? Hello World!!!

? Java I/O流

12、Demo 12(DataOuputStream)

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** java.io.DataOutputStream 數據專屬的字節輸出流* 這個流可以將數據連同數據的類型一并寫入文件(該文件不是普通的文本文件,無法用記事本打開)*/
public class DataOutputStreamTest {public static void main(String[] args) throws IOException {//創建數據專屬的字節輸出流DataOutputStream dos=new DataOutputStream(new FileOutputStream("/Users/lizhengi/test/iodemo/data"));//寫數據byte b=100;short s=200;int i=300;long j=400;float f=0.5F;double d=3.14;boolean flag=false;char a='我';dos.writeByte(b);dos.writeShort(s);dos.writeInt(i);dos.writeLong(j);dos.writeFloat(f);dos.writeDouble(d);dos.writeBoolean(flag);dos.writeChar(a);//刷新dos.flush();//關閉dos.close();}
}

13、Demo 13(DataInputStream)

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;/*** java.io.DataInputStream 數據專屬的字節輸入流* DataOutputStream 寫的文件只能使用 DataInputStream 來讀,同時讀的順序必須和寫的順序一樣*/
public class DataInputStreamTest {public static void main(String[] args) throws IOException {//創建數據專屬的字節輸入流DataInputStream dis=new DataInputStream(new FileInputStream("/Users/lizhengi/test/iodemo/data"));//開始讀byte b=dis.readByte();short s=dis.readShort();int i=dis.readInt();long j=dis.readLong();float f=dis.readFloat();double d=dis.readDouble();boolean flag=dis.readBoolean();char a=dis.readChar();System.out.println(b);System.out.println(s);System.out.println(i);System.out.println(j);System.out.println(f);System.out.println(d);System.out.println(flag);System.out.println(a);//關閉dis.close();}
}

輸出的:

? 100

? 200

? 300

? 400

? 0.5

? 3.14

? false

? 我

14、Demo 14(PrintStream)

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;/*** java.io.PrintStream* 標準字節輸出流,默認直接輸出到控制臺*/
public class PrintStreamTest {public static void main(String[] args) throws FileNotFoundException {System.out.println("Hello World!!!");//創建一個標準字節輸出流對象PrintStream ps = System.out;ps.println("Java I/O流");ps.println("Java 666");ps.println(123);//標準輸出流不需要手動調用close方法關閉//修改標準字節輸出流的輸出方向,輸出到 log 文件PrintStream printStrea m= new PrintStream(new FileOutputStream("/Users/lizhengi/test/iodemo/log"));System.setOut(printStream);//再次輸出,將不會輸出到控制臺System.out.println("Java I/O流");System.out.println("Java 666");System.out.println(999);}
}

輸出的:

? Hello World!!!
? Java I/O流
? Java 666
? 123

文件中:
Java I/O流
Java 666
999

15、Demo 15(I/O流聯合Properties屬性類使用)

import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;/*** I/O流和Properties的聯合使用* 設計理念:以后經常改變的數據,可以單獨寫道一個文件中,使用程序動態讀取* 將來只需要修改這個文件的內容,Java代碼不需要修改,不需要重新編譯,服務器也不需要重啟,就可以拿到動態的數據* <p>* 類似于以上機制的文件被稱為配置文件,其中的格式為* key1=value1* key2=value2 (key重復的情況下,value會自動覆蓋)* 的時候,我們把這種配置文件稱為屬性配置文件,例如:jdbc.properties* Java中有規范要求,屬性配置文件需要以 .properties 結尾,但這不是必須的* Properties類是Java中專門存放屬性配置文件的一個類*/
public class IoPropertiesTest {public static void main(String[] args) throws IOException {//Properties是一個Map集合,繼承了Hashtable,其key和value都是String類型//這里打算將一個文件中的數據加載到Properties對象中//新建一個文件字符輸入流對象FileReader reader = new FileReader("/Users/lizhengi/test/iodemo/userinfo.txt");//創建一個Properties集合Properties properties = new Properties();//調用Properties對象的load方法,將文件中的數據加載到Properties集合中properties.load(reader);//通過文件中的key獲取對應的valueString username = properties.getProperty("username");String password = properties.getProperty("password");System.out.println(username);System.out.println(password);}
}

文件中:

? username=root

? password=12345678

? key=value

輸出的:

? root

? 12345678

16、Demo 16(File)

import java.io.File;public class FileTest01 {public static void main(String[] args) {File file = new File("/Users/lizhengi/test/iodemo/");//獲取當前目錄下的所有子文件File[] files = file.listFiles();for (File file1 : files) {//獲取所有子文件的絕對路徑//System.out.println(file1.getAbsolutePath());//獲取所有子文件的文件名System.out.println(file1.getName());}}
}

輸出的:

? demo.txt
? .userinfo.txt.swp
? temp.txt
? log
? userinfo.txt
? data

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535440.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535440.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535440.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

比對excel數據

#!/usr/bin/env pythonimport openpyxl from openpyxl.styles import PatternFill from openpyxl.styles import colors from openpyxl.styles import Font, Color aD:/測算單位設置/比對/吉林/tmp001.xlsx bD:/測算單位設置/比對/吉林/國網吉林電力.xlsx cD:/測算單位設置/比對…

CPU 是如何執行任務的

前言 你清楚下面這幾個問題嗎&#xff1f; 有了內存&#xff0c;為什么還需要 CPU Cache&#xff1f; CPU 是怎么讀寫數據的&#xff1f; 如何讓 CPU 能讀取數據更快一些&#xff1f; CPU 偽共享是如何發生的&#xff1f;又該如何避免&#xff1f; CPU 是如何調度任務的&a…

Ansible 的自動化運維

1、Ansible 特點 Ansible 自 2012 年發布以來&#xff0c;很快在全球流行&#xff0c;其特點如下&#xff1a; Ansible 基于 Python 開發&#xff0c;運維工程師對其二次開發相對比較容易&#xff1b; Ansible 豐富的內置模塊&#xff0c;幾乎可以滿足一切要求&#xff1b; …

Shell 信號發送與捕捉

1、Linux信號類型 信號&#xff08;Signal&#xff09;&#xff1a;信號是在軟件層次上對中斷機制的一種模擬&#xff0c;通過給一個進程發送信號&#xff0c;執行相應的處理函數。 進程可以通過三種方式來響應一個信號&#xff1a; 1&#xff09;忽略信號&#xff0c;即對信…

運維面試題總結

集群相關 簡述 ETCD 及其特點&#xff1f; etcd 是 CoreOS 團隊發起的開源項目&#xff0c;是一個管理配置信息和服務發現&#xff08;service discovery&#xff09;的項目&#xff0c;它的目標是構建一個高可用的分布式鍵值&#xff08;key-value&#xff09;數據庫&#x…

詳解設計模式:建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;也叫做生成器模式&#xff0c;是 GoF 的 23 種設計模式的一種&#xff0c;它將一個復雜對象的構建與它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 當我們需要實列化一個復雜的類&#xff0c;以得到不同結…

圖文并茂 VLAN 詳解,讓你看一遍就理解 VLAN

一、為什么需要VLAN 1.1、什么是VLAN? VLAN(Virtual LAN)&#xff0c;翻譯成中文是“虛擬局域網”。LAN可以是由少數幾臺家用計算機構成的網絡&#xff0c;也可以是數以百計的計算機構成的企業網絡。VLAN所指的LAN特指使用路由器分割的網絡——也就是廣播域。 在此讓我們先復習…

認識VLAN,并學會VLAN的劃分和網絡配置實例

VLAN的劃分和網絡的配置實例 1、VLAN基礎知識 VLAN&#xff08;Virtual Local Area Network&#xff09;的中文名為&#xff1a;“虛擬局域網”&#xff0c;注意和VPN&#xff08;虛擬專用網&#xff09;進行區分。 VLAN是一種將局域網設備從邏輯上劃分&#xff08;不是從物…

VLAN劃分及配置注意事項

VLAN&#xff08;Virtual Local Area Network&#xff09;即虛擬局域網&#xff0c;是將一個物理的LAN在邏輯上劃分成多個廣播域的通信技術。VLAN內的主機間可以直接通信&#xff0c;而VLAN間不能直接通信&#xff0c;從而將廣播報文限制在一個VLAN內。VLAN之間的通信是通過第3…

Docker原理剖析

一、簡介 1、了解Docker的前生LXC LXC為Linux Container的簡寫。可以提供輕量級的虛擬化&#xff0c;以便隔離進程和資源&#xff0c;而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。相當于C中的NameSpace。容器有效地將由單個操作系統管理的資源劃分到孤立的組中&#…

獲取Linux內存、cpu、磁盤IO等信息

#!/bin/bash # 獲取要監控的本地服務器IP地址 IPifconfig | grep inet | grep -vE inet6|127.0.0.1 | awk {print $2} echo "IP地址&#xff1a;"$IP# 獲取cpu總核數 cpu_numgrep -c "model name" /proc/cpuinfo echo "cpu總核數&#xff1a;"$c…

Docker容器網絡解析

Docker 容器網絡的發展歷史 在 Dokcer 發布之初&#xff0c;Docker 是將網絡、管理、安全等集成在一起的&#xff0c;其中網絡模塊可以為容器提供橋接網絡、主機網絡等簡單的網絡功能。 從 1.7 版本開始&#xff0c;Docker正是把網絡和存儲這兩部分的功能都以插件化形式剝離出來…

將指定excel的一列數據提取到另一個excel的指定列

#!/usr/bin/env python import openpyxl bjD:/地市縣公司/西藏臺賬數據分析-設備臺帳分析.xlsx wb openpyxl.load_workbook (bj) get_sheets wb.sheetnames #print(get_sheets) TA01TA01 TA02TA02 TA03TA03 TE01TE01 YG201YG201 YG202YG202 YG203YG203 YG204YG204 YG205YG205…

Docker 數據管理介紹

默認容器的數據是保存在容器的可讀寫層&#xff0c;當容器被刪除時其上的數據也會丟失&#xff0c;所以為了實現數據的持久性則需要選擇一種數據持久技術來保存數據。官方提供了三種存儲方式&#xff1a;Volumes、Bind mounts和tmpfs。前面還介紹了&#xff1a;Docker 服務終端…

Docker 數據持久化的三種方案

容器中的數據可以存儲在容器層。但是將數據存放在容器層存在以下問題&#xff1a; 數據不是持久化。意思是如果容器刪除了&#xff0c;這些數據也就沒了 主機上的其它進程不方便訪問這些數據 對這些數據的I/O會經過存儲驅動&#xff0c;然后到達主機&#xff0c;引入了一層間…

Git 存儲原理及相關實現

Git 是目前最流行的版本控制系統&#xff0c;從本地開發到生產部署&#xff0c;我們每天都在使用 Git 進行我們的版本控制&#xff0c;除了日常使用的命令之外&#xff0c;如果想要對 Git 有更深一步的了解&#xff0c;那么研究下 Git 的底層存儲原理將會對理解 Git 及其使用非…

Git內部原理

Git有什么特點&#xff1f; fast&#xff0c;scalable&#xff0c;distributed revision control system&#xff08;快速&#xff0c;可擴展的分布式版本控制系統&#xff09; 幾乎所有操作都是本地執行 每一個clone都是整個生命周期的完整副本 the stupid content tracker&a…

git存儲原理

四種數據類型 實際上Git基于數據類型的不同&#xff0c;把對象分為四種&#xff1a;數據對象、樹對象、提交對象、標簽對象。Git文件系統的設計思路與linux文件系統相似&#xff0c;即將文件的內容與文件的屬性分開存儲&#xff0c;文件內容以“裝滿字節的袋子”存儲在文件系統…

詳解設計模式:中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09;也被稱為調停者模式&#xff0c;是在 GoF 23 種設計模式中定義了的行為型模式。 中介者模式 是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類&#xff0c;該類通常處理不同類之間的通信&#xff0c;并支…

rebase參數以及注意事項

可以根據需要將pick參數&#xff0c;改變為下面代表不同作用的參數&#xff1b;這樣就可以對節點C和D進行不同的操作了。比如&#xff1a; pick&#xff1a;默認參數&#xff0c;表示不對提交節點進行任何操作&#xff0c;直接應用原提交節點。不創建新提交&#xff1b; rewor…