1.什么是IO
Java中I/O操作主要是指使用Java進(jìn)行輸入,輸出操作. Java所有的I/O機(jī)制都是基于數(shù)據(jù)流進(jìn)行輸入輸出,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動(dòng)序列。Java的I/O流提供了讀寫(xiě)數(shù)據(jù)的標(biāo)準(zhǔn)方法。任何Java中表示數(shù)據(jù)源的對(duì)象都會(huì)提供以數(shù)據(jù)流的方式讀寫(xiě)它的數(shù)據(jù)的方法。
Java.io是大多數(shù)面向數(shù)據(jù)流的輸入/輸出類(lèi)的主要軟件包。此外,Java也對(duì)塊傳輸提供支持,在核心庫(kù) java.nio中采用的便是塊IO。
流IO的好處是簡(jiǎn)單易用,缺點(diǎn)是效率較低。塊IO效率很高,但編程比較復(fù)雜。
Java IO模型 :
Java的IO模型設(shè)計(jì)非常優(yōu)秀,它使用Decorator模式,按功能劃分Stream,您可以動(dòng)態(tài)裝配這些Stream,以便獲得您需要的功能。例如,您需要一個(gè)具有緩沖的文件輸入流,則應(yīng)當(dāng)組合使用FileInputStream和BufferedInputStream。
2.數(shù)據(jù)流的基本概念
數(shù)據(jù)流是一串連續(xù)不斷的數(shù)據(jù)的集合,就象水管里的水流,在水管的一端一點(diǎn)一點(diǎn)地供水,而在水管的另一端看到的是一股連續(xù)不斷的水流。數(shù)據(jù)寫(xiě)入程序可以是一段、一段地向數(shù)據(jù)流管道中寫(xiě)入數(shù)據(jù),這些數(shù)據(jù)段會(huì)按先后順序形成一個(gè)長(zhǎng)的數(shù)據(jù)流。對(duì)數(shù)據(jù)讀取程序來(lái)說(shuō),看不到數(shù)據(jù)流在寫(xiě)入時(shí)的分段情況,每次可以讀取其中的任意長(zhǎng)度的數(shù)據(jù),但只能先讀取前面的數(shù)據(jù)后,再讀取后面的數(shù)據(jù)。不管寫(xiě)入時(shí)是將數(shù)據(jù)分多次寫(xiě)入,還是作為一個(gè)整體一次寫(xiě)入,讀取時(shí)的效果都是完全一樣的。
“流是磁盤(pán)或其它外圍設(shè)備中存儲(chǔ)的數(shù)據(jù)的源點(diǎn)或終點(diǎn)。”
在電腦上的數(shù)據(jù)有三種存儲(chǔ)方式,一種是外存,一種是內(nèi)存,一種是緩存。比如電腦上的硬盤(pán),磁盤(pán),U盤(pán)等都是外存,在電腦上有內(nèi)存條,緩存是在CPU里面的。外存的存儲(chǔ)量最大,其次是內(nèi)存,最后是緩存,但是外存的數(shù)據(jù)的讀取最慢,其次是內(nèi)存,緩存最快。這里總結(jié)從外存讀取數(shù)據(jù)到內(nèi)存以及將數(shù)據(jù)從內(nèi)存寫(xiě)到外存中。對(duì)于內(nèi)存和外存的理解,我們可以簡(jiǎn)單的理解為容器,即外存是一個(gè)容器,內(nèi)存又是另外一個(gè)容器。那又怎樣把放在外存這個(gè)容器內(nèi)的數(shù)據(jù)讀取到內(nèi)存這個(gè)容器以及怎么把內(nèi)存這個(gè)容器里的數(shù)據(jù)存到外存中呢?
在Java類(lèi)庫(kù)中,IO部分的內(nèi)容是很龐大的,因?yàn)樗婕暗念I(lǐng)域很廣泛:
標(biāo)準(zhǔn)輸入輸出,文件的操作,網(wǎng)絡(luò)上的數(shù)據(jù)流,字符串流,對(duì)象流,zip文件流等等,java中將輸入輸出抽象稱(chēng)為流,就好像水管,將兩個(gè)容器連接起來(lái)。將數(shù)據(jù)沖外存中讀取到內(nèi)存中的稱(chēng)為輸入流,將數(shù)據(jù)從內(nèi)存寫(xiě)入外存中的稱(chēng)為輸出流。
流是一個(gè)很形象的概念,當(dāng)程序需要讀取數(shù)據(jù)的時(shí)候,就會(huì)開(kāi)啟一個(gè)通向數(shù)據(jù)源的流,這個(gè)數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接。類(lèi)似的,當(dāng)程序需要寫(xiě)入數(shù)據(jù)的時(shí)候,就會(huì)開(kāi)啟一個(gè)通向目的地的流。
總結(jié)的基本概念如下:
一組有序,有起點(diǎn)和終點(diǎn)的字節(jié)的數(shù)據(jù)序列。包括輸入流和輸出流。
程序從輸入流讀取數(shù)據(jù)源。數(shù)據(jù)源包括外界(鍵盤(pán)、文件、網(wǎng)絡(luò)…),即是將數(shù)據(jù)源讀入到程序的通信通道
采用數(shù)據(jù)流的目的就是使得輸出輸入獨(dú)立于設(shè)備。
Input Stream不關(guān)心數(shù)據(jù)源來(lái)自何種設(shè)備(鍵盤(pán),文件,網(wǎng)絡(luò))
Output Stream不關(guān)心數(shù)據(jù)的目的是何種設(shè)備(鍵盤(pán),文件,網(wǎng)絡(luò))
3. 標(biāo)準(zhǔn)I/O
Java程序可通過(guò)命令行參數(shù)與外界進(jìn)行簡(jiǎn)短的信息交換,同時(shí),也規(guī)定了與標(biāo)準(zhǔn)輸入、輸出設(shè)備,如鍵盤(pán)、顯示器進(jìn)行信息交換的方式。而通過(guò)文件可以與外界進(jìn)行任意數(shù)據(jù)形式的信息交換。
1. 命令行參數(shù)運(yùn)行結(jié)果:
args[0] is <Java>
args[1] is <C>
args[2] is <VB>
java系統(tǒng)自帶的標(biāo)準(zhǔn)數(shù)據(jù)流:java.lang.System:
注意:
(1)System類(lèi)不能創(chuàng)建對(duì)象,只能直接使用它的三個(gè)靜態(tài)成員。
(2)每當(dāng)main方法被執(zhí)行時(shí),就自動(dòng)生成上述三個(gè)對(duì)象。
1) 標(biāo)準(zhǔn)輸出流 System.out
System.out向標(biāo)準(zhǔn)輸出設(shè)備輸出數(shù)據(jù),其數(shù)據(jù)類(lèi)型為PrintStream。方法:
2)標(biāo)準(zhǔn)輸入流 System.in
System.in讀取標(biāo)準(zhǔn)輸入設(shè)備數(shù)據(jù)(從標(biāo)準(zhǔn)輸入獲取數(shù)據(jù),一般是鍵盤(pán)),其數(shù) 據(jù)類(lèi)型為InputStream。方法:
3)標(biāo)準(zhǔn)錯(cuò)誤流
System.err輸出標(biāo)準(zhǔn)錯(cuò)誤,其數(shù)據(jù)類(lèi)型為PrintStream。可查閱API獲得詳細(xì)說(shuō)明。
標(biāo)準(zhǔn)輸出通過(guò)System.out調(diào)用println方法輸出參數(shù)并換行,而print方法輸出參數(shù)但不換行。println或print方法都通 過(guò)重載實(shí)現(xiàn)了輸出基本數(shù)據(jù)類(lèi)型的多個(gè)方法,包括輸出參數(shù)類(lèi)型為boolean、char、int、long、float和double。同時(shí),也重載實(shí)現(xiàn) 了輸出參數(shù)類(lèi)型為char[]、String和Object的方法。其中,print(Object)和println(Object)方法在運(yùn)行時(shí)將調(diào) 用參數(shù)Object的toString方法。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class StandardInputOutput {
public static void main(String args[]) {
String s;
// 創(chuàng)建緩沖區(qū)閱讀器從鍵盤(pán)逐行讀入數(shù)據(jù)
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(ir);
System.out.println("Unix系統(tǒng): ctrl-d 或 ctrl-c 退出"
+ "/nWindows系統(tǒng): ctrl-z 退出");
try {
// 讀一行數(shù)據(jù),并標(biāo)準(zhǔn)輸出至顯示器
s = in.readLine();
// readLine()方法運(yùn)行時(shí)若發(fā)生I/O錯(cuò)誤,將拋出IOException異常
while (s != null) {
System.out.println("Read: " + s);
s = in.readLine();
}
// 關(guān)閉緩沖閱讀器
in.close();
} catch (IOException e) { // Catch any IO exceptions.
e.printStackTrace();
}
}
}
4.java.IO層次體系結(jié)構(gòu)
在整個(gè)Java.io包中最重要的就是5個(gè)類(lèi)和一個(gè)接口。5個(gè)類(lèi)指的是File、OutputStream、InputStream、Writer、Reader;一個(gè)接口指的是Serializable.掌握了這些IO的核心操作那么對(duì)于Java中的IO體系也就有了一個(gè)初步的認(rèn)識(shí)了
Java I/O主要包括如下幾個(gè)層次,包含三個(gè)部分:
1.流式部分 主站蜘蛛池模板: 久久久久久久黄色片 | 久久午夜神器 | 伊人网站 | 亚洲国产精品久久久久久久久久久 | 中日无线码1区 | h视频免费看 | 一本精品999爽爽久久久 | 日本精品视频一区二区三区四区 | 91在线免费观看 | av电影免费在线看 | 超污视频在线看 | 欧美一级电影网站 | 羞羞视频免费观看网站 | 97超级碰碰人国产在线观看 | 免费a观看 | 国产做爰全免费的视频黑人 | 亚洲综合视频在线播放 | 久久亚洲春色中文字幕久久 | 成人在线视频在线观看 | 欧美精品久久久久久久多人混战 | 在线成人免费网站 | 宅男噜噜噜66国产免费观看 | 国产精品午夜未成人免费观看 | 一级黄色在线观看 | 日本欧美一区二区三区在线播 | 精精国产xxxx视频在线野外 | 欧美三级日本三级少妇99 | 99日韩精品视频 | 一级毛片免费一级 | 欧美aⅴ在线观看 | 成人在线视频免费播放 | 国产69精品久久久久9999不卡免费 | 国产精品久久久久网站 | 精品国产乱码久久久久久丨区2区 | 国产91久久久 | 国产精品视频一区二区三区四 | 国产午夜精品一区二区三区不卡 | 久久亚洲精选 | 成人一级视频在线观看 | 日韩99| 日韩av电影免费在线观看 |