Java進階-IO(1)

進入java IO部分的學習,首先學習IO基礎,內容如下。需要了解流的概念、分類還有其他一些如集合與文件的轉換,字符編碼問題等,這次先學到字節流的讀寫數據,剩余下次學完。
在這里插入圖片描述

一、IO基礎

1、背景

1.1 數據存儲問題

變量、數組、對象和集合中存儲的數據是暫時存在的,一旦程序結束它們就會丟失。

解決:為了永久保存程序創建的數據,需要將其保存到磁盤文件中。

1.2 流與IO

1)流
是一種抽象概念,是對數據傳輸的總稱。即數據在設備間的傳輸稱為流,流的本質是數據傳輸

  • Java 中所有數據都是用流讀寫的。
  • 流是一組有序的數據序列(以輸入流的形式獲取,輸出流的形式輸出),將數據從一個地方帶到另一個地方。(可類比水管里水的流動)
    • 輸入:將數據從各種輸入設備(包括文件、鍵盤等)中讀取到內存中
    • 輸出:將數據寫入到各種輸出設備(比如文件、顯示器、磁盤等)
  • 流相關的類都封裝在 java.io 包中,且每個數據流都是一個對象。

可分為輸入和輸出兩種模式

輸入流:文件、網絡、數據庫及其他數據源—(輸入流)—>目的地
輸出流:源—(輸出流)—>文件、網絡、數據庫及其他數據源

2)Java 的 I/O(輸入/輸出)技術
作用:處理設備間數據傳輸問題

將數據保存到文本文件和二進制文件中, 以達到永久保存數據的要求。常見應用:文件復制;文件上傳;文件下載

2、流的分類

2.1 按流的方向

1)輸入流(input)
用于讀數據

所有輸入流類都是 InputStream 抽象類(字節輸入流)和 Reader 抽象類(字符輸入流)的子類

InputStream(字節輸入流)結構------>了解即可

FileInputStream  文件輸入流
PipedInputStream  管道輸入流
ObjectInputStream  對象輸入流FilterInputStream  過濾器輸入流
- PushBackInputStream  回壓輸入流
- BufferedInputStream  緩沖輸入流
- DataInputStream  數據輸入流SequenceInputStream  順序輸入流
ByteArrayInputStream  字節數組輸入流
StringBufferInputStream  緩沖字符串輸入流

InputStream 類常用方法------>掌握

read()方法(重載)3- int read():從輸入流讀入一個 8 字節的數據,將它轉換成一個 0~ 255 的整數,返回一個整數,如果遇到輸入流的結尾返回 -1
- int read(byte[] b):從輸入流讀取若干字節的數據保存到參數 b 指定的字節數組中,返回的字節數表示讀取的字節數,如果遇到輸入流的結尾返回 -1
- int read(byte[] b,int off,int len):從輸入流讀取若干字節的數據保存到參數 b 指定的字節數組中,其中 off 是指在數組中開始保存數據位置的起始下標,len 是指讀取字節的位數。返回的是實際讀取的字節數,如果遇到輸入流的結尾則返回 -1close():關閉數據流,當完成對數據流的操作之后需要關閉數據流
available():返回可以從數據源讀取的數據流的位數
skip(long n):從輸入流跳過參數 n 指定的字節數目markSupported():判斷輸入流是否可以重復讀取
mark(int readLimit):如果輸入流可以被重復讀取,從流的當前位置開始設置標記,readLimit 指定可以設置標記的字節數
reset():使輸入流重新定位到剛才被標記的位置,這樣可以重新讀取標記過的數據

兩點注意:

最后 3 個方法一般結合使用,先用 markSupported() 判斷,如果可以重復讀取,則用 mark(int readLimit) 方法進行標記,標記完成后可以用 read() 方法讀取標記范圍內的字節數,最后用 reset() 方法使輸入流重新定位到標記的位置,繼而完成重復讀取操作。

Java 中的字符是 Unicode 編碼(雙字節),而 InputerStream 是用來處理單字節的,在處理字符文本時不是很方便。這時可以使用 Java 的文本輸入流 Reader 類,該類是字符輸入流的抽象類,即所有字符輸入流的實現都是它的子類,該類的方法與 InputerSteam 類的方法類似,不再贅述。

2)輸出流(Output)
用于寫數據

所有輸出流類都是 OutputStream 抽象類(字節輸出流)和 Writer 抽象類(字符輸出流)的子類

OutputStream(字節輸出流)結構------>了解即可

FileOutputStream  文件輸出流
PipedOutputStream  管道輸出流
ObjectOutputStream  對象輸出流
FilterOutputStream  過濾器輸出流
PrintStream  打印輸出流
BufferedOutputStream  緩沖輸出流
DataOutputStream  數據輸出流
ByteArrayOutputStream  字節數組輸出流

OutputStream 類常用方法------>掌握

write()方法(重載)3- int write(b):將指定字節的數據寫入到輸出流
- int write(byte[] b):將指定字節數組的內容寫入輸出流
- int write(byte[] b,int off,int len):將指定字節數組從 off 位置開始的 len 字節的內容寫入輸出流
close():關閉數據流
flush():刷新數據流
2.2 按數據單位
一般IO流是按數據單位(即數據類型)來分的
流的使用:
- 如果數據通過window自帶的記事本軟件打開,還可以讀懂里面的內容,就用字符流,否則用字節流
- 如果不知道使用哪種類型的流,就用字節流(字節流是萬能的流)

1)字節流
寫數據
字節流抽象基類(父類)

InputStream:是字節輸入流的所有類的超類(父類)
OutputStream:是字節輸出流的所有類的超類
子類名特點:子類名稱都是以其父類名作為子類名的后綴 (可參考上一節的輸入流和輸出流內容)

FileOutputStream:文件輸出流用于將數據寫入File

FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件

使用字節輸出流寫數據的步驟:(創建對象–>寫數據–>釋放資源)

1、創建字節輸出流對象(做了3件事情)
- 調用系統功能創建了文件
- 創建字節輸出流對象
- 讓字節輸出流對象指向文件2、調用字節輸出流對象的寫數據方法
3、釋放資源(關閉此文件輸出流并釋放與此流相關聯的任何系統資源)

示例1

import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamDemo1 {public static void main(String[] args) throws IOException { // 拋出異常// 創建字節輸出流對象// FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件FileOutputStream fos=new FileOutputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt");/*做了三件事情:1:調用系統功能創建了文件2:創建字節輸出流對象3:讓字節輸出流對象指向創建好的文件*///void write(int b):將指定的字節寫入此文件輸出流fos.write(97);  // afos.write(57);  // 9 (是字符不是數字)fos.write(55);  // 7 (是字符不是數字)// 最后都要釋放資源// void close():關閉此文件輸出流并釋放與此流相關聯的任何系統資源fos.close();}
}

運行結果(會生成一個fos.txt文件,打開查看內容如下)

a97

字節流寫數據的三種方式(write()方法的重載–3個)

int write(b):將指定字節的數據寫入到輸出流
int write(byte[] b):將指定字節數組的內容寫入輸出流
int write(byte[] b,int off,int len):將指定字節數組從 off 位置開始的 len 字節的內容寫入輸出流

示例2

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;public class FileOutputStreamDemo2 {public static void main(String[] args) throws IOException { // 拋出異常/*** 1.創建對象*/// 創建字節輸出流對象// FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件FileOutputStream fos1=new FileOutputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt");/*** 2.寫數據(3種方式)*/// void write(int b):將指定的字節寫入此文件輸出流
//        fos1.write(97);
//        fos1.write(98);
//        fos1.write(99);
//        fos1.write(100);
//        fos1.write(101);  // 結果:abcde// void write(byte[] b):將指定字節數組的內容寫入輸出流
//        byte[] bys={97,98,99,100,101};  //方法1:創建數組byte[] bys="abcde".getBytes();    //方法2:getBytes()方法
//        fos1.write(bys);      // 結果:abcde// void write(byte[] b,int off,int len):將指定字節數組從 off 位置開始的 len 字節的內容寫入輸出流
//        fos1.write(bys,0,bys.length);  // 結果:abcdefos1.write(bys,1,3);     // 結果:bcd/*** 3.釋放資源*/fos1.close();}
}

getBytes()方法使用注意:

getBytes(String charsetName): 使用指定的字符集將字符串編碼為 byte 序列,并將結果存儲到一個新的 byte 數組中。getBytes(): 使用平臺的默認字符集將字符串編碼為 byte 序列,并將結果存儲到一個新的 byte 數組中。

字節流寫數據的兩個小問題
a、實現換行(添加換行符)

windows:\r\n
linux:\n
mac:\r

b、實現追加寫入

public FileOutputStream(String name,boolean append)創建文件輸出流以指定名稱寫入文件。若第二個參數為true,則字節將寫入文件的末尾而不是開頭(開頭覆蓋,末尾追加)
- 默認是false,即寫在開頭,這樣每運行一次都會覆蓋原內容,追加寫入時要改為true

示例3

import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamDemo3 {public static void main(String[] args) throws IOException {// 創建字節輸出流對象//boolean append為true實現追加(將字節寫入末尾而不是開頭)FileOutputStream fos3=new FileOutputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt",true);// 寫數據for(int i=0;i<10;i++){fos3.write("hello".getBytes()); // getBytes()方法fos3.write("\r\n".getBytes()); // 每寫完一次做一個換行}// 釋放資源fos3.close();}
}

補充:

try-catch異常處理(一般文件相關的異常直接用throws拋出即可,但try-catch異常捕獲方式也要了解,不懂的可以回去看異常處理部分)

finally:在異常處理時提供finally塊來執行所有清除操作。如IO流中的釋放資源。特點:被finally控制的語句一定會執行,除非JVM退出

示例4

import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamDemo4 {public static void main(String[] args) {FileOutputStream fos4 = null; // 初始化文件對象為null(全局+初始化)try {// 創建對象
//            fos4 = new FileOutputStream("Z:\\Ultimate JavaCode\\src\\test6\\fos4.txt"); //文件不存在會拋出FileNotFoundException異常fos4 = new FileOutputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt");// 寫入數據fos4.write("javaEE".getBytes());// 關閉資源fos4.close();// 若寫入操作存在異常,則直接跳到catch捕獲,不會執行關閉資源操作,這時需要引入finally} catch (IOException e) { // 捕獲異常e.printStackTrace(); //存在異常時,追蹤異常信息} finally { // 加入finally實現釋放資源if(fos4!=null){ // 文件不為null時,才需要釋放資源(防止文件為null時關閉資源出現空指針異常NullPointerException)try{fos4.close(); // 釋放資源}catch (IOException e){e.printStackTrace();}}}}
}

讀數據
字節流讀數據(一次讀一個字節數據)

FileInputStream:從文件系統中的文件獲取輸入字節
- FileInputStream(String name):通過打開與實際文件的連接來創建一個FileInputStream,該文件由文件系統中的路徑名name命名使用字節輸入流讀數據的步驟:(創建對象-->讀數據-->釋放資源)
1、創建字節輸入流對象(做了3件事情)
- 調用系統功能創建了文件
- 創建字節輸出流對象
- 讓字節輸出流對象指向文件
2、調用字節輸入流對象的讀數據方法
3、釋放資源(關閉此文件輸出流并釋放與此流相關聯的任何系統資源)

字節流讀數據的3種方式(read()方法重載–3個)

int read():從輸入流讀入一個 8 字節的數據,將它轉換成一個 0~ 255 的整數,返回一個整數,如果遇到輸入流的結尾返回 -1
int read(byte[] b):從輸入流讀取若干字節的數據保存到參數 b 指定的字節數組中,返回的字節數表示讀取的字節數,如果遇到輸入流的結尾返回 -1
int read(byte[] b,int off,int len):從輸入流讀取若干字節的數據保存到參數 b 指定的字節數組中,其中 off 是指在數組中開始保存數據位置的起始下標,len 是指讀取字節的位數。返回的是實際讀取的字節數,如果遇到輸入流的結尾則返回 -1

案例1

import java.io.FileInputStream;
import java.io.IOException;public class FileInputStreamDemo1 {public static void main(String[] args) throws IOException {// 創建對象FileInputStream fis=new FileInputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt");// 讀數據
//        int bys= fis.read();
//        System.out.println(bys); // 結果:98(文件的字符是'b')
//        System.out.println((char)bys); // 大轉小,強制轉換,顯示原字符(結果:b)/*字節流讀數據標準代碼如下1.fis.read():讀數據2.by=fis.read():將讀取的數據賦值給by3.by!=-1:判斷讀取到的數據是否是-1(到達文件末尾)*/int by; // 類型聲明while((by=fis.read())!=-1){System.out.print((char)by); // 強轉顯示原字符(結果:bcd),注意用print而不是println}// 釋放資源fis.close();}
}

案例2:字節流復制文本文件
需求:把文本文件的內容從一個文件中讀取出來(數據源),然后寫入到另一個文件中(目的地)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class FileInputStreamDemo2{public static void main(String[] args) throws IOException {// 創建對象FileInputStream fis=new FileInputStream("D:\\文本復制案例.txt"); // 從指定路徑下讀取要復制的文本文件(數據源)FileOutputStream fos=new FileOutputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt");//目的地// 先從數據源(fis)讀取,后寫入目的地(fos)int by;while((by=fis.read())!=-1){ // 一次讀取一個字節,直到讀完(到文件末尾)fos.write(by); // 一次寫入一個字節}// 釋放資源fos.close();fis.close(); // 先創建的后釋放}
}

案例3
需求:字節流讀數據(一次讀一個字符數組),用到int read(byte[] b)構造方法

import java.io.FileInputStream;
import java.io.IOException;public class FileInputStreamDemo3 {public static void main(String[] args) throws IOException {// 創建對象FileInputStream fis=new FileInputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt");byte[] bys=new byte[1024]; // 1024及其整數倍int len;// 讀取數據while((len=fis.read(bys))!=-1){ // 一次讀一個字符數組,用到int read(byte[] b)構造方法System.out.println(new String(bys,0,len)); // new String方法轉換為字符串輸出到控制臺}// 釋放資源fis.close();}
}

字節緩沖流

BufferedOutputStream:該類實現緩沖輸出流。 通過設置這樣的輸出流,應用程序可以將字節寫入基礎輸出流,而不必為寫入的每個字節調用底層系統。
BufferedInputStream:創建BufferedInputStream將創建一個內部緩沖區數組。當從流中讀取或跳過字節時內部緩沖區將根據需要從所包含的輸入流中重新填充,一次很多字節。

構造方法

字節緩沖輸出流:BufferedOutputStream(OutputStream out)
字節緩沖輸入流:BufferedInputStream(InputStream in)問題:構造方法里需要的是字節流而不是具體的文件或路徑?
原因:字節緩沖流僅僅提供緩沖區,而真正的讀寫數據還得依靠基本的字節流對象進行操作。

示例

import java.io.*;public class BufferStreamDemo1 {public static void main(String[] args) throws IOException {
//        FileOutputStream fos=new FileOutputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt");
//        BufferedOutputStream bos=new BufferedOutputStream(fos);// 創建字節緩沖輸出流對象BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt"));// 操作1:寫數據bos.write("hello\n".getBytes());bos.write("javaEE\n".getBytes());// 創建字節緩沖輸入流對象(用于讀數據)BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\ASUS\\Desktop\\project1\\src\\fos.txt"));// 操作2:讀數據// 方法1:一次讀取一個字節數據
//        int by;
//        while((by=bis.read())!=-1){
//            System.out.println((char)by);
//        }// 方法2:一次讀取一個字節數組byte[] bys=new byte[1024]; // 1024及其整數倍int len;while((len=bis.read(bys))!=-1){System.out.println(new String(bys,0,len)); // 轉換為字符串輸出到控制臺}// 釋放資源bos.close();}
}

運行結果(打開fos.txt文件,顯示如下)

hello
javaEE

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

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

相關文章

代碼隨想錄day11(1)字符串:反轉字符串中的單詞 (leetcode151)

題目要求&#xff1a;給定一個字符串&#xff0c;將其中單詞順序反轉&#xff0c;且每個單詞之間有且僅有一個空格。 思路&#xff1a;因為本題沒有限制空間復雜度&#xff0c;所以首先想到的是用split直接分割單詞&#xff0c;然后將單詞倒敘相加。 但如果想讓空間復雜度為O…

芯來科技發布最新NI系列內核,NI900矢量寬度可達512/1024位

參考&#xff1a;芯來科技發布最新NI系列內核&#xff0c;NI900矢量寬度可達512/1024位 (qq.com) 本土RISC-V CPU IP領軍企業——芯來科技正式發布首款針對人工智能應用的專用處理器產品線Nuclei Intelligence(NI)系列&#xff0c;以及NI系列的第一款AI專用RISC-V處理器CPU IP…

反向迭代器

反向迭代器 以list為例,我們完全可以再添加一個__list_reverse_iterator結構體,只需要修改和–的邏輯 template <class T, class Ref, class Ptr> struct __list_reverse_iterator {...self& operator(){_node _node->_prev;return *this;}self operator(int){…

Android 14.0 Launcher3定制化之桌面分頁橫線改成圓點顯示功能實現

1.前言 在14.0的系統rom產品定制化開發中&#xff0c;在進行launcher3的定制化中&#xff0c;在雙層改為單層的開發中&#xff0c;在原生的分頁 是橫線&#xff0c;而為了美觀就采用了系統原來的另外一種分頁方式&#xff0c;就是圓點比較美觀&#xff0c;接下來就來分析下相關…

網絡爬蟲部分應掌握的重要知識點

目錄 一、預備知識1、Web基本工作原理2、網絡爬蟲的Robots協議 二、爬取網頁1、請求服務器并獲取網頁2、查看服務器端響應的狀態碼3、輸出網頁內容 三、使用BeautifulSoup定位網頁元素1、首先需要導入BeautifulSoup庫2、使用find/find_all函數查找所需的標簽元素 四、獲取元素的…

基于springboot+vue的健身房管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

●139.單詞拆分 ● 關于多重背包,你該了解這些! ●背包問題總結篇!

●139.單詞拆分 物品&#xff1a;wordDict里面的單詞&#xff1b;背包容量&#xff1a;s.size()。 1.dp[j]含義。dp[j]true表示字符串前j個可以拆分成字典中的單詞。dp[s.size()] 就是最后的結果&#xff0c;整個字符串能&#xff08;true&#xff09;不能&#xff08;false…

Docker 創建容器并指定時區

目錄 1. 通過環境變量設置時區&#xff08;推薦&#xff09;2. 掛載宿主機的時區文件到容器中3. 總結 要在 Docker 容器中指定時區&#xff0c;可以通過兩種方式來實現&#xff1a; 1. 通過環境變量設置時區&#xff08;推薦&#xff09; 在 Docker 運行時&#xff0c;可以通…

NumPy數據處理詳解的筆記1

NumPy數據處理詳解的筆記1 第1章NumPy基礎 NumPy是用于處理多維數組的數值運算庫&#xff0c;不僅可用于 機器學習&#xff0c;還可以用于圖像處理&#xff0c;語言處理等任務。 1.1 NumPy的基礎與安裝方法 1.1.1 NumPy入門 NumPy是Python中進行科學計算所必備的基礎軟件庫…

CentOS安裝Docker(黑馬學習筆記)

Docker 分為 CE 和 EE 兩大版本。CE 即社區版&#xff08;免費&#xff0c;支持周期 7 個月&#xff09;&#xff0c;EE 即企業版&#xff0c;強調安全&#xff0c;付費使用&#xff0c;支持周期 24 個月。 Docker CE 分為 stable test 和 nightly 三個更新頻道。 官方網站上…

文件底層的理解之緩沖區

目錄 一、緩沖區的初步認識 二、向文件中寫數據的具體過程 三、緩沖區刷新的時機 一、緩沖區的初步認識 緩沖區其實就是一塊內存區域&#xff0c;采用空間來換時間&#xff0c;可以提高使用者的效率。我們一直說的緩沖區其實是語言層面上的緩沖區&#xff0c;其實操作系統內部…

JVM 第一部分 JVM兩種解釋器 類加載過程和類加載器

JVM是跨平臺跨語言的虛擬機&#xff0c;不直接接觸硬件&#xff0c;位于操作系統的上一層 跟字節碼文件直接關聯&#xff0c;和語言沒有關系 一次編譯成字節碼文件&#xff0c;多次執行 虛擬機可以分成三部分&#xff1a;類加載器&#xff0c;運行時數據區&#xff0c;執行引…

TDengine 在 DISTRIBUTECH 分享輸配電數據管理實踐

2 月 27-29 日&#xff0c;2024 美國國際輸配電電網及公共事業展&#xff08;DISTRIBUTECH International 2024&#xff09;在美國-佛羅里達州-奧蘭多國家會展中心舉辦。作為全球領先的年度輸配電行業盛會&#xff0c;也是美洲地區首屈一指的專業展覽會&#xff0c;該展會的舉辦…

C++從零開始的打怪升級之路(day41)

這是關于一個普通雙非本科大一學生的C的學習記錄貼 在此前&#xff0c;我學了一點點C語言還有簡單的數據結構&#xff0c;如果有小伙伴想和我一起學習的&#xff0c;可以私信我交流分享學習資料 那么開啟正題 今天分享的是關于繼承的知識點 1.派生類的默認成員函數 首先我…

【和鯨冬令營】通過數據打造爆款社交APP用戶行為分析報告

【&#x1f40b;和鯨冬令營】通過數據打造爆款社交APP用戶行為分析報告 文章目錄 【&#x1f40b;和鯨冬令營】通過數據打造爆款社交APP用戶行為分析報告1 業務背景2 數據說明3 數據探索性分析4 用戶行為分析4.1 用戶屬性與行為關系分析4.2 轉化行為在不同用戶屬性群體中的分布…

值類型和引用類型詳解(C#)

可能你對值類型和引用類型還不太了解。 值類型和引用類型&#xff0c;是c#比較基礎&#xff0c;也必須掌握的知識點&#xff0c;但是也不是那么輕易就能掌握&#xff0c;今天跟著我一起來看看吧。 典型類型 首先我們看看這兩種不同的類型有哪些比較典型的代表。 典型值類型…

【云安全】網絡安全領域安全協議

IPSEC協議 IPSec&#xff08;Internet Protocol Security&#xff09;是一種網絡層安全協議&#xff0c;用于在IP通訊過程中確保完整性、認證性和機密性。它通過在標準的IP協議上加入安全機制來實現加密和認證。IPSec主要由兩個協議組成&#xff1a;認證頭&#xff08;AH&…

在Windows 10系統中啟用快速啟動功能

在Windows 10系統中啟用快速啟動功能&#xff0c;可以按照以下步驟進行&#xff1a; 方法一&#xff08;通過設置應用&#xff09;&#xff1a; 點擊任務欄左下角的“開始”按鈕或者按鍵盤上的Win鍵打開“開始”菜單。在“開始”菜單中選擇“設置”圖標&#xff08;齒輪形狀&…

3.3日學習打卡----初學Redis(一)

3.3日學習打卡 目錄&#xff1a; 3.3日學習打卡NoSQL為什么要用NoSQL什么是NoSQL?NoSQL的四大分類關系型數據庫和非關系型數據及其區別NoSQL經典應用 RedisRedis是什么?Linux下安裝RedisDocker下安裝Redis基本知識 NoSQL 為什么要用NoSQL 單機Mysql的美好年代 在90年代&…

Sqlmap進行http頭注入及流量分析

環境準備:構建完善的安全滲透測試環境:推薦工具、資源和下載鏈接_滲透測試靶機下載-CSDN博客 利用 SQLMap 進行 HTTP 頭注入的方式對于 Less-19 注入點的注入 SQLMap 工具我使用kali中自帶的 注入準備 先使用bp將Less-19靶場的包抓下來保存到 txt 文件中,輸入賬號 admin…