天天看點

java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結

基流 

java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結

上圖中有句話寫錯了,應該是 位元組流的根類。

檔案輸出/入位元組流

java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結
java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結

 代碼示例

心得:

  1. 讀寫檔案流 關心 讀的時候讀多少,寫的時候寫多少,它沒有限制一次隻能讀/寫多少。
  2. 檔案流的建立 到 檔案流的關閉 為一個周期。
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //第一步:建立一個檔案輸入流
        FileInputStream fis = new FileInputStream("src/IOTest/test.txt");
        //第二步:建立一個檔案輸出流
        FileOutputStream fos = new FileOutputStream("src/IOTest/clone.txt",true);
        //第四步:規定一次性讀取資料長度
        byte[] buffer = new byte[1024];
        while (true){
            //第三步:讀取資料
            int len = fis.read(buffer);
            if (len == -1){
                break;
            }
            fos.write(buffer,0,len);
        }
        //關閉流
        fis.close();
        fos.close();
    }
}
           

 ByteArray位元組流

java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結

 代碼示例:

心得:

  1.  ByteArrayInputStream 主要作用是與記憶體資料互動,如果要與媒體(如檔案,網絡,控制台)互動,還是得建立 檔案流 (FileXXXStream)的
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        String str = "關注我,不迷路---我想月薪過萬的CSDN";
        //第一步:建立 ByteArrayInputStream
        ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
        //第二步:建立 ByteArrayOutputStream 參數 size 不寫也沒關系
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //第三步:建立 FileOutputStream ,因為 FileOutputStream 是節點流 ,隻有它 才能和 檔案媒體互動
        FileOutputStream fos = new FileOutputStream("src/IOTest/123.txt");
        //第四步:檔案讀寫
        //規定一次讀取資料大小
        byte[] buffer = new byte[1024];
        while (true){
            int len = bais.read(buffer);
            if (len == -1){
                break;
            }
            baos.write(buffer,0,len);
        }
        //寫入檔案
        baos.writeTo(fos);
        //關閉流
        bais.close();
        baos.close();
        fos.close();
    }
}
           

 效果展示

java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結

 Data位元組流

java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結
java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結

代碼示例

心得:

  1. 感覺這個累的左右就是  FileXXXStream() 本身
  2. 但是他有個優點,從上面第二章api圖就可以看出,他是資料處理流,可以直接擷取 java 的各個資料類型
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //建立輸入流
        DataInputStream dis = new DataInputStream(new FileInputStream("src/IOTest/test.txt"));
        //建立輸出流
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
        //讀寫資料
        byte[] buffer = new byte[1024];
        while (true){
            int len = dis.read(buffer);
            if (len == -1){
                break;
            }
            dos.write(buffer,0,len);
        }
        //關閉流
        dis.close();
        dos.close();
    }
}
           

緩沖位元組流 

java基礎之 IO 流(InputStream/OutputStream)基流 檔案輸出/入位元組流 ByteArray位元組流 Data位元組流緩沖位元組流 總結

代碼示例

package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //建立輸入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src/IOTest/test.txt"));
        //建立輸出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
        //讀寫資料
        byte[] buffer = new byte[1024];
        while (true){
            int len = bis.read(buffer);
            if (len == -1){
                break;
            }
            bos.write(buffer,0,len);
            bos.flush();//當緩沖區裝滿了之後,自動導出
        }
        //關閉流
        bis.close();
        bos.close();
    }
}
           

總結

基流:InputStream、OutputStream

與檔案打交道的節點流:FileInputStream、FileOutputStream

與記憶體打交道的節點流:ByteArrayInputStream、ByteArrayOutputStream

處理流:DataInputStream、DataOutputStream ||| BufferedInputStream、BufferedOutputStream