首頁 > 軟體

Java IO流之位元組輸入流的使用詳解

2022-08-23 18:01:10

一、InputStream位元組輸入流

①、是一個抽象類,不能夠建立物件,需要被繼承才能夠使用

②、在java.io包下,使用時需要匯入

③、公共的方法:

方法一: int read()

方法二: int read(byte[] b)

方法三: void close()

更多方法請檢視官方API

二、FileInputStream檔案輸入類

①、該類繼承了InputStream,可以使用InputStream中的方法

②、能夠把硬碟檔案中的資料讀取到記憶體中使用

③、構造方法

FileInputStream (String name)
FileInputStream (File file)

引數的含義:

name 是檔案的路徑

file 是檔案

作用:

建立物件

把物件指定到構造方法中藥讀取的檔案

④、使用步驟

1、建立FileInputStream物件,構造方法中繫結要讀取的資料來源

2、使用物件中的read方法,讀取資料

3、釋放資源

⑤、read()方法

讀取到檔案末尾會返回-1(不管讀多少次)

⑥、補充:String的建構函式

1、String (byte[] bytes)  把位元組陣列轉換為字串

2、String (byte[] bytes,int offset,int length) 把位元組陣列的一部分轉換為字串,從offset位置開始,取length長

⑦、一次性讀取多個檔案

// todo 一次性讀取多個位元組
// 1、定義一個位元組陣列
byte[] bytes = new byte[3];
// 2、建立檔案輸入物件
FileInputStream fis = new FileInputStream("E:\JavaCode\JavaSE\Day8-23\src\a.txt");
// 3、讀取檔案
int read = fis.read(bytes);
// 4、輸出
System.out.println(new String(bytes));

⑧、使用迴圈一次性讀取多個位元組

// 一次性讀取多個位元組
byte[] bytes1 = new byte[1024];
FileInputStream fis = new FileInputStream("E:\JavaCode\JavaSE\Day8-23\src\a.txt");
int len = 0;
while ((len=fis.read(bytes1))!=-1){
System.out.println(new String(bytes1,0,len));

​​​​​​​}

三、檔案複製

原理:一讀一寫

目的:將A地址裡面的a檔案複製到B地址裡面去

步驟:

1、建立一個位元組輸入流物件,構造方法中繫結要讀取的資料來源

2、建立一個位元組輸出流物件,構造方法中繫結要寫入的目的地

3、使用位元組輸入流物件中的方法read讀取檔案

4、使用位元組輸出流物件中的方法write吧讀取到的位元組寫入到目的地檔案中

5、釋放資源(先釋放寫的資源再釋放讀的資源,因為寫完就代表已經讀完了)

方式一:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
    public static void main(String[] args) {

        try {
            long s = System.currentTimeMillis();
            // 1、建立位元組輸入流  起始地
            FileInputStream fis = new FileInputStream("E:\JavaCode\JavaSE\Day8-23\src\a.txt");
            // 2、建立位元組輸出流  目的地
            FileOutputStream fos = new FileOutputStream("E:\JavaCode\JavaSE\Day8-23\src\copy\a.txt");
            // 3、讀取資料並寫入目的地
            int len = 0;
            while ((len = fis.read())!=-1){
                fos.write(len);
            }
            long e = System.currentTimeMillis();
            System.out.println("傳輸檔案總共用時:"+(e-s)+"毫秒");
            // 4、釋放資源
            fos.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }




    }
}

耗時:2毫秒

方式二:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
    public static void main(String[] args) {

        try {
            long s = System.currentTimeMillis();
            // 1、建立位元組輸入流  起始地
            FileInputStream fis = new FileInputStream("E:\JavaCode\JavaSE\Day8-23\src\a.txt");
            // 2、建立位元組輸出流  目的地
            FileOutputStream fos = new FileOutputStream("E:\JavaCode\JavaSE\Day8-23\src\copy\a.txt");
            // 3、讀取資料並寫入目的地
            byte[] b = new byte[1024];
            int len = 0;
            while ((len = fis.read(b))!=-1){
                fos.write(b,0,len);
            }
            long e = System.currentTimeMillis();
            System.out.println("傳輸檔案總共用時:"+(e-s)+"毫秒");
            // 4、釋放資源
            fos.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }




    }
}

兩者的區別:可以很明顯的看出來方式一和方式二的區別在於:在迴圈的時候判斷條件那裡出現的不一樣,使用方式二的方式可以是檔案複製更加的快捷,在初期推薦使用第二種方式進行檔案的複製

到此這篇關於Java IO流之位元組輸入流的使用詳解的文章就介紹到這了,更多相關Java 位元組輸入流內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com