什么是IO:
IO(Input/Out)是將進程的內(nèi)部數(shù)據(jù)遷移到外部即輸出惋增,或將外部數(shù)據(jù)遷移到進程內(nèi)部即輸入奸忽。
例如:
Input:磁盤數(shù)據(jù)-->內(nèi)存堕伪,鍵盤輸入-->內(nèi)存中
Output:內(nèi)存數(shù)據(jù)-->磁盤,內(nèi)存-->網(wǎng)卡
數(shù)據(jù)的IO通常由CPU來完成栗菜,但CPU的運行速度遠遠高于磁盤等設備欠雌,所以在IO編程中,就存在速度嚴重不匹配的問題疙筹。
什么是IO流富俄?
流(steam),通常指液體的移動(從一個地方到另一個地方)而咆,因此編程中的“流”也需要具備4個要素:
- 源頭(source):流的起始點霍比,可以是內(nèi)存,磁盤暴备,網(wǎng)卡悠瞬,鍵盤等設備;
- 目標(target):流的終止點涯捻,可以是內(nèi)存浅妆,磁盤,網(wǎng)卡障癌,打印機等設備凌外;
- 通道(channel):流的運輸載體,在編程中通常對應相應的類涛浙;
- 液體(fluid):在源頭與目標中流動的“液體”康辑,我們稱為字節(jié)(byte),字節(jié)流是IO流中最基本的存在蝗拿,其他流(如字符流)都是在其基礎上通過特定的解碼規(guī)則來實現(xiàn)的晾捏;
JAVA中的IO流:
- 源頭類:可以是File類,Socket類哀托;
- 目標類:內(nèi)存中字節(jié)數(shù)組,byte[] buf劳秋;
- 通道類:各種InputStrem仓手,OutputStream及其子類胖齐;
- 液體:File,Socket類中對應的二進制byte數(shù)據(jù)嗽冒;
示例
通過下面一段代碼呀伙,我們就可以將源頭(File類)的數(shù)據(jù),讀入到內(nèi)存(byte數(shù)組)中添坊;
File file = new File("F:[\\myPhoto.jpg]"); //定義源頭為磁盤中的文件
byte[] buf = new byte[1024]; //定義目標為內(nèi)存中的一段地址
FileInputStream fileInputStream = new FileInputStream(file);//定義管道
fileInputStream.read(buf))剿另;//將源頭中的字節(jié)讀入到目標內(nèi)存中