基流
上圖中有句話寫錯了,應該是 位元組流的根類。
檔案輸出/入位元組流
代碼示例
心得:
- 讀寫檔案流 關心 讀的時候讀多少,寫的時候寫多少,它沒有限制一次隻能讀/寫多少。
- 檔案流的建立 到 檔案流的關閉 為一個周期。
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位元組流
代碼示例:
心得:
- 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();
}
}
效果展示
Data位元組流
代碼示例
心得:
- 感覺這個累的左右就是 FileXXXStream() 本身
- 但是他有個優點,從上面第二章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();
}
}
緩沖位元組流
代碼示例
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