1. 程式人生 > >java輸入輸出10:IO流(IO流概述及其分類)

java輸入輸出10:IO流(IO流概述及其分類)

1 概念

1、IO流用來處理裝置之間的資料傳輸。
2、Java對資料的操作時通過流的方式。
3、Java用於操作流的類都在IO包中。
4、流按流向分為兩種:輸入流,輸出流。
5、流按照操作型別分為兩種:(1)位元組流:位元組流可以操作任何資料,因為在計算機中任何資料都是以位元組的形式儲存的。(2)字元流:字元流只能操作純字元資料,比較方便。

2 IO流常用父類

(1)位元組流的抽象父類:

1、InputStream
2、OutputStream

(2)字元流的抽象父類:

1、Reader
2、Writer

java的輸入流主要由InputStream和Reader作為基類,而輸出流則主要由OutputStream和Writer作為基類。它們都是一些抽象基類,無法直接建立物件。

位元組流和字元流的用法幾乎是完全相同的,其區別在於他們的讀取資料單元不同,位元組流操作的資料單元是8位的位元組,字元流操作的資料單元是16位的字元。

3 IO程式書寫

1、使用前,匯入IO包中的類。
2、使用時,進行IO異常處理。
3、使用後,釋放資源。

演示:

package filePackage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Demo3_FileInputStream {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("C:\\demoFile1\\file.txt");//建立流物件
		/*int a = fis.read();//從硬碟上讀取一個位元組
		System.out.println(a);
		int b = fis.read();
		System.out.println(b);
		int c = fis.read();
		System.out.println(c);
		*/
		int m;
		while((m = fis.read()) != -1) {
			System.out.print(m + "\t");
		}
		fis.close();//關閉流釋放資源
	}
}

file.txt檔案內容為:abc
執行結果如下:
在這裡插入圖片描述

4 IO流read()方法返回值為什麼是int

read()方法讀取的是一個位元組,為什麼返回是int,而不是byte?

因為位元組輸入可以操作任意型別的檔案,比如圖片音訊等,這些檔案底層都是以二進位制形式儲存的,如果每次讀取都返回byte,有可能在讀到中間的時候遇到11111111(補碼),那麼11111111是byte型別的-1,程式遇到-1就會停止讀取,後面的資料就無法讀取到。而在讀取的時候用int型別接收,如果11111111會在其前面補上24個0湊足4個位元組,那麼byte型別的-1就變成int型別的255了這樣可以保證整個資料讀完,而結束標記的-1就是int型別。