国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java輸入輸出流的使用詳細介紹

2019-11-26 16:09:40
字體:
供稿:網(wǎng)友

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é)的基本概念如下:

1) 數(shù)據(jù)流

    一組有序,有起點和終點的字節(jié)的數(shù)據(jù)序列。包括輸入流和輸出流。

  

2) 輸入流(Input  Stream):

      程序從輸入流讀取數(shù)據(jù)源。數(shù)據(jù)源包括外界(鍵盤、文件、網(wǎng)絡(luò)…),即是將數(shù)據(jù)源讀入到程序的通信通道

     
 3) 輸出流:
    程序向輸出流寫入數(shù)據(jù)。將程序中的數(shù)據(jù)輸出到外界(顯示器、打印機、文件、網(wǎng)絡(luò)…)的通信通道。

         

采用數(shù)據(jù)流的目的就是使得輸出輸入獨立于設(shè)備。

Input  Stream不關(guān)心數(shù)據(jù)源來自何種設(shè)備(鍵盤,文件,網(wǎng)絡(luò))
Output  Stream不關(guān)心數(shù)據(jù)的目的是何種設(shè)備(鍵盤,文件,網(wǎng)絡(luò))

4 數(shù)據(jù)流分類:
流序列中的數(shù)據(jù)既可以是未經(jīng)加工的原始二進制數(shù)據(jù),也可以是經(jīng)一定編碼處理后符合某種格式規(guī)定的特定數(shù)據(jù)。因此Java中的流分為兩種:
 1)  字節(jié)流:數(shù)據(jù)流中最小的數(shù)據(jù)單元是字節(jié)
 2)  字符流:數(shù)據(jù)流中最小的數(shù)據(jù)單元是字符, Java中的字符是Unicode編碼,一個字符占用兩個字節(jié)。

3. 標準I/O

      Java程序可通過命令行參數(shù)與外界進行簡短的信息交換,同時,也規(guī)定了與標準輸入、輸出設(shè)備,如鍵盤、顯示器進行信息交換的方式。而通過文件可以與外界進行任意數(shù)據(jù)形式的信息交換。

1. 命令行參數(shù)
復(fù)制代碼 代碼如下:

public class TestArgs {  
    public static void main(String[] args) {  
        for (int i = 0; i < args.length; i++) {  
            System.out.println("args[" + i + "] is <" + args[i] + ">");  
        }  
    } 


運行結(jié)果:

args[0] is <Java>

args[1] is <C>

args[2] is <VB>

2. 標準輸入,輸出數(shù)據(jù)流

java系統(tǒng)自帶的標準數(shù)據(jù)流:java.lang.System:

復(fù)制代碼 代碼如下:

java.lang.System  
public final class System  extends Object{  
   static  PrintStream  err;//標準錯誤流(輸出)  
   static  InputStream  in;//標準輸入(鍵盤輸入流)  
   static  PrintStream  out;//標準輸出流(顯示器輸出流)  


注意:
(1)System類不能創(chuàng)建對象,只能直接使用它的三個靜態(tài)成員。
(2)每當main方法被執(zhí)行時,就自動生成上述三個對象。

1) 標準輸出流 System.out

   System.out向標準輸出設(shè)備輸出數(shù)據(jù),其數(shù)據(jù)類型為PrintStream。方法:

      Void print(參數(shù))
      Void println(參數(shù))

2)標準輸入流 System.in

    System.in讀取標準輸入設(shè)備數(shù)據(jù)(從標準輸入獲取數(shù)據(jù),一般是鍵盤),其數(shù) 據(jù)類型為InputStream。方法:

        int read()  //返回ASCII碼。若,返回值=-1,說明沒有讀取到任何字節(jié)讀取工作結(jié)束。
         int read(byte[] b)//讀入多個字節(jié)到緩沖區(qū)b中返回值是讀入的字節(jié)數(shù)
例如:
復(fù)制代碼 代碼如下:

public class StandardInputOutput { 
    public static void main(String args[]) { 
        int b; 
        try { 
            System.out.println("please Input:"); 
            while ((b = System.in.read()) != -1) { 
                System.out.print((char) b); 
            } 
        } catch (IOException e) { 
            System.out.println(e.toString()); 
        } 
    } 


等待鍵盤輸入,鍵盤輸入什么,就打印出什么:

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方法。

復(fù)制代碼 代碼如下:

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.流式部分

主站蜘蛛池模板: 宣化县| 平南县| 偃师市| 错那县| 延吉市| 旬阳县| 德阳市| 鄢陵县| 新泰市| 静乐县| 稻城县| 三河市| 小金县| 岳普湖县| 金乡县| 皮山县| 容城县| 板桥市| 乌拉特前旗| 翁牛特旗| 民权县| 嵊泗县| 西平县| 家居| 万山特区| 屯昌县| 平邑县| 堆龙德庆县| 南澳县| 饶河县| 千阳县| 喀喇| 育儿| 崇礼县| 循化| 昌宁县| 武宁县| 永川市| 巴南区| 永福县| 馆陶县|