位元組流

N1ce2cu發表於2024-07-31

位元組輸出流(OutputStream)


java.io.OutputStream位元組輸出流超類(父類),我們來看一下它定義的一些共性方法:

1、 close() :關閉此輸出流並釋放與此流相關聯的系統資源。

2、 flush() :重新整理此輸出流並強制緩衝區的位元組被寫入到目的地。

3、 write(byte[] b):將 b.length 個位元組從指定的位元組陣列寫入此輸出流。

4、 write(byte[] b, int off, int len) :從指定的位元組陣列寫入 len 位元組到此輸出流,從偏移量 off開始。 也就是說從off個位元組數開始一直到len個位元組結束

FileOutputStream 類


構造方法

1、使用檔名建立 FileOutputStream 物件。

String fileName = "example.txt";
FileOutputStream fos = new FileOutputStream(fileName);

以上程式碼使用檔名 "example.txt" 建立一個 FileOutputStream 物件,將資料寫入到該檔案中。如果檔案不存在,則建立一個新檔案;如果檔案已經存在,則覆蓋原有檔案

2、使用檔案物件建立 FileOutputStream 物件。

File file = new File("example.txt");
FileOutputStream fos = new FileOutputStream(file);

寫入位元組資料

寫入位元組 write(int b)

每次可以寫入一個位元組:

// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt");     
// 寫出資料
fos.write(97); // 第1個位元組
fos.write(98); // 第2個位元組
fos.write(99); // 第3個位元組
// 關閉資源
fos.close();

寫入位元組陣列write(byte[] b)

// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt");     
// 字串轉換為位元組陣列
byte[] b = "xxx".getBytes();
// 寫入位元組陣列資料
fos.write(b);
// 關閉資源
fos.close();

寫入指定長度位元組陣列write(byte[] b, int off, int len)

// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt");     
// 字串轉換為位元組陣列
byte[] b = "abcde".getBytes();
// 從索引2開始,2個位元組。索引2是c,兩個位元組,也就是cd。
fos.write(b,2,2);
// 關閉資源
fos.close();

資料追加、換行

使用檔名和追加標誌建立 FileOutputStream 物件:

String fileName = "example.txt";
boolean append = true;
FileOutputStream fos = new FileOutputStream(fileName, append);

使用檔案物件和追加標誌建立 FileOutputStream 物件:

File file = new File("example.txt");
boolean append = true;
FileOutputStream fos = new FileOutputStream(file, append);

實現資料追加程式碼如下:

// 使用檔名稱建立流物件
FileOutputStream fos = new FileOutputStream("fos.txt",true);     
// 字串轉換為位元組陣列
byte[] b = "abcde".getBytes();
// 寫出從索引2開始,2個位元組。索引2是c,兩個位元組,也就是cd。
fos.write(b);
// 關閉資源
fos.close();

在 Windows 系統中,換行符號是\r\n,在 macOS 系統中,換行符是 \n

位元組輸入流


java.io.InputStream位元組輸入流超類(父類),我們來看一下它的一些共性方法:

1、close() :關閉此輸入流並釋放與此流相關的系統資源。

2、int read(): 從輸入流讀取資料的下一個位元組。

3、read(byte[] b): 該方法返回的 int 值代表的是讀取了多少個位元組,讀到幾個返回幾個,讀取不到返回-1

FileInputStream 類


構造方法

1、FileInputStream(String name):建立一個 FileInputStream 物件,並開啟指定名稱的檔案進行讀取。檔名由 name 引數指定。如果檔案不存在,將會丟擲 FileNotFoundException 異常。

2、FileInputStream(File file):建立一個 FileInputStream 物件,並開啟指定的 File 物件表示的檔案進行讀取。

程式碼示例如下:

// 建立一個 FileInputStream 物件
FileInputStream fis = new FileInputStream("test.txt");

// 讀取檔案內容
int data;
while ((data = fis.read()) != -1) {
    System.out.print((char) data);
}

// 關閉輸入流
fis.close();

讀取方法

讀取位元組read()

讀取一個位元組並返回其整數表示。如果已經到達檔案的末尾,則返回 -1。如果在讀取時發生錯誤,則會丟擲 IOException 異常:

// 建立一個 FileInputStream 物件
FileInputStream fis = new FileInputStream("test.txt");

// 讀取檔案內容
int data;
while ((data = fis.read()) != -1) {
    System.out.print((char) data);
}

// 關閉輸入流
fis.close();

使用位元組陣列讀取read(byte[] b)

從輸入流中最多讀取 b.length 個位元組,並將它們儲存到緩衝區陣列 b 中:

// 建立一個 FileInputStream 物件
FileInputStream fis = new FileInputStream("test.txt");

// 讀取檔案內容到緩衝區
byte[] buffer = new byte[1024];
int count;
while ((count = fis.read(buffer)) != -1) {
    System.out.println(new String(buffer, 0, count));
}

// 關閉輸入流
fis.close();

複製圖片

// 建立一個 FileInputStream 物件以讀取原始圖片檔案
FileInputStream fis = new FileInputStream("original.jpg");
// 建立一個 FileOutputStream 物件以寫入複製後的圖片檔案
FileOutputStream fos = new FileOutputStream("copy.jpg");

// 建立一個緩衝區陣列以儲存讀取的資料
byte[] buffer = new byte[1024];
int count;

// 讀取原始圖片檔案並將資料寫入複製後的圖片檔案
while ((count = fis.read(buffer)) != -1) {
    fos.write(buffer, 0, count);
}

// 關閉輸入流和輸出流
fis.close();
fos.close();

相關文章