麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Java > 正文

Java輸入輸出流的使用詳細(xì)介紹

2019-11-26 16:09:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

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

  

2) 輸入流(Input  Stream):

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

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

         

采用數(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ò))

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

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ù)
復(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] + ">");  
        }  
    } 


運(yùn)行結(jié)果:

args[0] is <Java>

args[1] is <C>

args[2] is <VB>

2. 標(biāo)準(zhǔn)輸入,輸出數(shù)據(jù)流

java系統(tǒng)自帶的標(biāo)準(zhǔn)數(shù)據(jù)流:java.lang.System:

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

java.lang.System  
public final class System  extends Object{  
   static  PrintStream  err;//標(biāo)準(zhǔn)錯(cuò)誤流(輸出)  
   static  InputStream  in;//標(biāo)準(zhǔn)輸入(鍵盤(pán)輸入流)  
   static  PrintStream  out;//標(biāo)準(zhǔn)輸出流(顯示器輸出流)  


注意:
(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。方法:

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

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

        int read()  //返回ASCII碼。若,返回值=-1,說(shuō)明沒(méi)有讀取到任何字節(jié)讀取工作結(jié)束。
         int read(byte[] b)//讀入多個(gè)字節(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()); 
        } 
    } 


等待鍵盤(pán)輸入,鍵盤(pán)輸入什么,就打印出什么:

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

復(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ū)閱讀器從鍵盤(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电影免费在线观看 |