什么是IO:
IO(Input/Out)是將進(jìn)程的內(nèi)部數(shù)據(jù)遷移到外部即輸出,或?qū)⑼獠繑?shù)據(jù)遷移到進(jìn)程內(nèi)部即輸入。
例如:
Input:磁盤數(shù)據(jù)-->內(nèi)存,鍵盤輸入-->內(nèi)存中
Output:內(nèi)存數(shù)據(jù)-->磁盤,內(nèi)存-->網(wǎng)卡
數(shù)據(jù)的IO通常由CPU來完成,但CPU的運(yùn)行速度遠(yuǎn)遠(yuǎn)高于磁盤等設(shè)備,所以在IO編程中,就存在速度嚴(yán)重不匹配的問題。
什么是IO流?
流(steam),通常指液體的移動(dòng)(從一個(gè)地方到另一個(gè)地方),因此編程中的“流”也需要具備4個(gè)要素:
- 源頭(source):流的起始點(diǎn),可以是內(nèi)存,磁盤,網(wǎng)卡,鍵盤等設(shè)備;
- 目標(biāo)(target):流的終止點(diǎn),可以是內(nèi)存,磁盤,網(wǎng)卡,打印機(jī)等設(shè)備;
- 通道(channel):流的運(yùn)輸載體,在編程中通常對(duì)應(yīng)相應(yīng)的類;
- 液體(fluid):在源頭與目標(biāo)中流動(dòng)的“液體”,我們稱為字節(jié)(byte),字節(jié)流是IO流中最基本的存在,其他流(如字符流)都是在其基礎(chǔ)上通過特定的解碼規(guī)則來實(shí)現(xiàn)的;
JAVA中的IO流:
- 源頭類:可以是File類,Socket類;
- 目標(biāo)類:內(nèi)存中字節(jié)數(shù)組,byte[] buf;
- 通道類:各種InputStrem,OutputStream及其子類;
- 液體:File,Socket類中對(duì)應(yīng)的二進(jìn)制byte數(shù)據(jù);
示例
通過下面一段代碼,我們就可以將源頭(File類)的數(shù)據(jù),讀入到內(nèi)存(byte數(shù)組)中;
File file = new File("F:[\\myPhoto.jpg]"); //定義源頭為磁盤中的文件
byte[] buf = new byte[1024]; //定義目標(biāo)為內(nèi)存中的一段地址
FileInputStream fileInputStream = new FileInputStream(file);//定義管道
fileInputStream.read(buf));//將源頭中的字節(jié)讀入到目標(biāo)內(nèi)存中