1.什么是IO
Java中I/O操作主要是指使用Java進行輸入,輸出操作. Java所有的I/O機制都是基于數(shù)據(jù)流進行輸入輸出,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動序列。Java的I/O流提供了讀寫數(shù)據(jù)的標準方法。任何Java中表示數(shù)據(jù)源的對象都會提供以數(shù)據(jù)流的方式讀寫它的數(shù)據(jù)的方法。
Java.io是大多數(shù)面向數(shù)據(jù)流的輸入/輸出類的主要軟件包。此外,Java也對塊傳輸提供支持,在核心庫 java.nio中采用的便是塊IO。
流IO的好處是簡單易用,缺點是效率較低。塊IO效率很高,但編程比較復(fù)雜。
Java IO模型 :
Java的IO模型設(shè)計非常優(yōu)秀,它使用Decorator模式,按功能劃分Stream,您可以動態(tài)裝配這些Stream,以便獲得您需要的功能。例如,您需要一個具有緩沖的文件輸入流,則應(yīng)當組合使用FileInputStream和BufferedInputStream。
2.數(shù)據(jù)流的基本概念
數(shù)據(jù)流是一串連續(xù)不斷的數(shù)據(jù)的集合,就象水管里的水流,在水管的一端一點一點地供水,而在水管的另一端看到的是一股連續(xù)不斷的水流。數(shù)據(jù)寫入程序可以是一段、一段地向數(shù)據(jù)流管道中寫入數(shù)據(jù),這些數(shù)據(jù)段會按先后順序形成一個長的數(shù)據(jù)流。對數(shù)據(jù)讀取程序來說,看不到數(shù)據(jù)流在寫入時的分段情況,每次可以讀取其中的任意長度的數(shù)據(jù),但只能先讀取前面的數(shù)據(jù)后,再讀取后面的數(shù)據(jù)。不管寫入時是將數(shù)據(jù)分多次寫入,還是作為一個整體一次寫入,讀取時的效果都是完全一樣的。
“流是磁盤或其它外圍設(shè)備中存儲的數(shù)據(jù)的源點或終點。”
在電腦上的數(shù)據(jù)有三種存儲方式,一種是外存,一種是內(nèi)存,一種是緩存。比如電腦上的硬盤,磁盤,U盤等都是外存,在電腦上有內(nèi)存條,緩存是在CPU里面的。外存的存儲量最大,其次是內(nèi)存,最后是緩存,但是外存的數(shù)據(jù)的讀取最慢,其次是內(nèi)存,緩存最快。這里總結(jié)從外存讀取數(shù)據(jù)到內(nèi)存以及將數(shù)據(jù)從內(nèi)存寫到外存中。對于內(nèi)存和外存的理解,我們可以簡單的理解為容器,即外存是一個容器,內(nèi)存又是另外一個容器。那又怎樣把放在外存這個容器內(nèi)的數(shù)據(jù)讀取到內(nèi)存這個容器以及怎么把內(nèi)存這個容器里的數(shù)據(jù)存到外存中呢?
在Java類庫中,IO部分的內(nèi)容是很龐大的,因為它涉及的領(lǐng)域很廣泛:
標準輸入輸出,文件的操作,網(wǎng)絡(luò)上的數(shù)據(jù)流,字符串流,對象流,zip文件流等等,java中將輸入輸出抽象稱為流,就好像水管,將兩個容器連接起來。將數(shù)據(jù)沖外存中讀取到內(nèi)存中的稱為輸入流,將數(shù)據(jù)從內(nèi)存寫入外存中的稱為輸出流。
流是一個很形象的概念,當程序需要讀取數(shù)據(jù)的時候,就會開啟一個通向數(shù)據(jù)源的流,這個數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接。類似的,當程序需要寫入數(shù)據(jù)的時候,就會開啟一個通向目的地的流。
總結(jié)的基本概念如下:
一組有序,有起點和終點的字節(jié)的數(shù)據(jù)序列。包括輸入流和輸出流。
程序從輸入流讀取數(shù)據(jù)源。數(shù)據(jù)源包括外界(鍵盤、文件、網(wǎng)絡(luò)…),即是將數(shù)據(jù)源讀入到程序的通信通道
采用數(shù)據(jù)流的目的就是使得輸出輸入獨立于設(shè)備。
Input Stream不關(guān)心數(shù)據(jù)源來自何種設(shè)備(鍵盤,文件,網(wǎng)絡(luò))
Output Stream不關(guān)心數(shù)據(jù)的目的是何種設(shè)備(鍵盤,文件,網(wǎng)絡(luò))
3. 標準I/O
Java程序可通過命令行參數(shù)與外界進行簡短的信息交換,同時,也規(guī)定了與標準輸入、輸出設(shè)備,如鍵盤、顯示器進行信息交換的方式。而通過文件可以與外界進行任意數(shù)據(jù)形式的信息交換。
1. 命令行參數(shù)運行結(jié)果:
args[0] is <Java>
args[1] is <C>
args[2] is <VB>
java系統(tǒng)自帶的標準數(shù)據(jù)流:java.lang.System:
注意:
(1)System類不能創(chuàng)建對象,只能直接使用它的三個靜態(tài)成員。
(2)每當main方法被執(zhí)行時,就自動生成上述三個對象。
1) 標準輸出流 System.out
System.out向標準輸出設(shè)備輸出數(shù)據(jù),其數(shù)據(jù)類型為PrintStream。方法:
2)標準輸入流 System.in
System.in讀取標準輸入設(shè)備數(shù)據(jù)(從標準輸入獲取數(shù)據(jù),一般是鍵盤),其數(shù) 據(jù)類型為InputStream。方法:
3)標準錯誤流
System.err輸出標準錯誤,其數(shù)據(jù)類型為PrintStream。可查閱API獲得詳細說明。
標準輸出通過System.out調(diào)用println方法輸出參數(shù)并換行,而print方法輸出參數(shù)但不換行。println或print方法都通 過重載實現(xiàn)了輸出基本數(shù)據(jù)類型的多個方法,包括輸出參數(shù)類型為boolean、char、int、long、float和double。同時,也重載實現(xiàn) 了輸出參數(shù)類型為char[]、String和Object的方法。其中,print(Object)和println(Object)方法在運行時將調(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ū)閱讀器從鍵盤逐行讀入數(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ù),并標準輸出至顯示器
s = in.readLine();
// readLine()方法運行時若發(fā)生I/O錯誤,將拋出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)
在整個Java.io包中最重要的就是5個類和一個接口。5個類指的是File、OutputStream、InputStream、Writer、Reader;一個接口指的是Serializable.掌握了這些IO的核心操作那么對于Java中的IO體系也就有了一個初步的認識了
Java I/O主要包括如下幾個層次,包含三個部分:
1.流式部分 主站蜘蛛池模板: 宣化县| 平南县| 偃师市| 错那县| 延吉市| 旬阳县| 德阳市| 鄢陵县| 新泰市| 静乐县| 稻城县| 三河市| 小金县| 岳普湖县| 金乡县| 皮山县| 容城县| 板桥市| 乌拉特前旗| 翁牛特旗| 民权县| 嵊泗县| 西平县| 家居| 万山特区| 屯昌县| 平邑县| 堆龙德庆县| 南澳县| 饶河县| 千阳县| 喀喇| 育儿| 崇礼县| 循化| 昌宁县| 武宁县| 永川市| 巴南区| 永福县| 馆陶县|