最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java IO 字節(jié)流詳解及實(shí)例代碼

 更新時(shí)間:2017年03月14日 08:54:44   投稿:lqh  
這篇文章主要介紹了java IO 字節(jié)流詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

java IO 字節(jié)流詳解

1.         如何理解輸入輸出流?

這是我當(dāng)初在學(xué)習(xí)Java IO這一塊很難理解的一塊,輸入輸出流我們可必須以一個(gè)為參照物:我們以?xún)?nèi)存為參照物,凡是寫(xiě)入內(nèi)存的我們叫輸入流,從內(nèi)存中寫(xiě)出的我們叫輸出流。看下面的示例圖

有了這樣的一個(gè)概念對(duì)于我們?cè)賹W(xué)習(xí)Java中的IO流我相信就會(huì)變得特別簡(jiǎn)單了。 

2.         再看流的分類(lèi)

流的分類(lèi),Java的流分類(lèi)比較豐富,剛接觸的人看了后會(huì)感覺(jué)很暈。流分類(lèi)的方式很多:

1、按照輸入的方向分,輸入流和輸出流,輸入輸出的參照對(duì)象是Java程序。(InputStream OutPutStream)
2、按照處理數(shù)據(jù)的單位不同分,字節(jié)流和字符流,字節(jié)流讀取的最小單位是一個(gè)字節(jié)(1byte=8bit),而字符流一次可以讀取一個(gè)字符(1char = 2byte = 16bit)。(InputStream Reader)
3、按照功能的不同分,分節(jié)點(diǎn)流和處理流,節(jié)點(diǎn)流是直接從一個(gè)源讀寫(xiě)數(shù)據(jù)的流(這個(gè)流沒(méi)有經(jīng)過(guò)包裝和修飾),處理流是在對(duì)節(jié)點(diǎn)流封裝的基礎(chǔ)上的 一種流,F(xiàn)ileInputStream是一個(gè)接點(diǎn)流,可以直接從文件讀取數(shù)據(jù),但是BufferedInputStream可以包裝 FileInputStream,使得其有緩沖功能。(FileInputStream BufferedInputStream)
其實(shí)除了以上三種分類(lèi)外,還有一些常常聽(tīng)到的一些分類(lèi)比如:對(duì)象流、緩沖流、壓縮流、文件流等等。其實(shí)都是節(jié)點(diǎn)流和處理流的子分類(lèi)。當(dāng)然你也可以創(chuàng)建新的流類(lèi)型,只要你需要。

3.         字節(jié)流:

字節(jié)流主要操作byte類(lèi)型數(shù)據(jù),以byte數(shù)組為準(zhǔn),主要操作類(lèi)有InputStream(字節(jié)輸入流)、OutputSteam(字節(jié)輸出流)由于IputStream和OutputStream都是抽象類(lèi),所要要用這兩個(gè)類(lèi)的話,則首先要通過(guò)子類(lèi)實(shí)例化對(duì)象。下面就是這兩個(gè)類(lèi)的一些子類(lèi)結(jié)構(gòu)圖 

 

1)        字節(jié)輸出流:OutputStream

OutputStream是一個(gè)抽象類(lèi),要想使用它,必須通過(guò)子類(lèi)來(lái)實(shí)例化它。 

OutputStream類(lèi)的常用方法

方法名稱(chēng)

描述

public void close() throws IOException

關(guān)閉輸出流

public void flush() throws IOException

刷新緩沖區(qū)

public void write(byte[] b) throws IOException

將一個(gè)byte數(shù)組寫(xiě)入數(shù)據(jù)流

public void write(byte[] b,int off,int len) throws IOException

將一個(gè)指定范圍的byte數(shù)組寫(xiě)入數(shù)據(jù)流

public abstract void write(int b) throws IOException

將一個(gè)字節(jié)數(shù)據(jù)寫(xiě)入數(shù)據(jù)流

  

實(shí)例1:Helloworld從HelloWorld開(kāi)始

功能:(向一個(gè)名為”hello.txt”的文本文件中寫(xiě)一個(gè)“HelloWorld”) 

public static void main(String[] args) throws Exception { 
 
  // 創(chuàng)建一個(gè)以當(dāng)前工程目錄下的名為“helloworld.txt”的文本文件 
 
  File file = new File("hellowolrd.txt"); 
 
  OutputStream outputStream = null; 
 
  // 通過(guò)FileOutPutStream的子類(lèi)實(shí)例化OutputStream對(duì)象 
 
  outputStream = new FileOutputStream(file); 
 
  // 聲明一個(gè)字符串 
 
  String str = "hello,world"; 
 
  // 將字符串轉(zhuǎn)換成字節(jié)數(shù)組 
 
  byte[] b = str.getBytes(); 
 
  // 寫(xiě)入數(shù)據(jù) 
 
  outputStream.write(b); 
 
  // 關(guān)閉輸出流 
 
  outputStream.close(); 
 
  outputStream.flush(); 
 
} 

我們可以看到當(dāng)前工程目錄下已經(jīng)有一個(gè)helloworld.txt且里面已經(jīng)有數(shù)據(jù),如果我們把str的值改變的話,文本文件里的數(shù)據(jù)也會(huì)改變,所以我們想是不是可以不刪除原來(lái)的數(shù)據(jù),在追尾上追加上。

我們只要在構(gòu)造FileOutputStream對(duì)象的時(shí)候選擇另一種構(gòu)造方法就可以了

FileOutputStream(File file,boolean append)

第二個(gè)參數(shù)就是是否采用追加的方式寫(xiě)入到文本文件中

把上面的代碼修改下就可以了

outputStream = new FileOutputStream(file,true);

 再?gòu)睦?我們理解我們對(duì)輸入輸出流的理解,在這個(gè)例子里,我們聲明的字符串肯定是在內(nèi)存中的,現(xiàn)在我們要從內(nèi)存中把數(shù)據(jù)寫(xiě)到文本中,所以我們用到輸出流。這也正符合了我對(duì)輸入輸出流的理解,當(dāng)然大家肯定還有其他的理解方式。

2)        字節(jié)輸入流:InputStream

 InputStream類(lèi)的常用方法

方法名稱(chēng)

描述

public void avaliable() throws IOException

可以取得輸入文件的大小

public void close() throws IOException

關(guān)閉輸入流

public abstract int read() throws IOException

讀取內(nèi)容,以數(shù)字的方式讀取

public int read (byte b) throws IOException

將內(nèi)容讀到byte數(shù)組,同時(shí)返回讀入的個(gè)數(shù)

與OutputStream類(lèi)一樣,InputStream本身也是一個(gè)抽象類(lèi),要想使用它,也必須依靠其子類(lèi)。

實(shí)例2:還是HelloWorld

在上一個(gè)例子的基礎(chǔ)上我們從文本中讀取數(shù)據(jù)并且把它顯示在控制臺(tái)上

public static void main(String[] args) throws Exception { 
 
    // 創(chuàng)建一個(gè)以當(dāng)前工程目錄下的名為“helloworld.txt”的文本文件 
 
    // 這個(gè)文件在上一個(gè)例子里已經(jīng)創(chuàng)建,并且里面已有數(shù)據(jù) 
 
    File file = new File("hellowolrd.txt"); 
 
    // 聲明InputStream對(duì)象 
 
    InputStream inputStream = null; 
 
    // 通過(guò)FileInputStream子類(lèi)實(shí)例化InputStream對(duì)象 
 
    inputStream = new FileInputStream(file); 
 
    // 聲明一個(gè)字節(jié)數(shù)組用以接收讀入的數(shù)據(jù) 
 
    byte[] b = new byte[1024]; 
 
    // 開(kāi)始讀入數(shù)據(jù),將數(shù)據(jù)內(nèi)容讀到此數(shù)組中 
 
    inputStream.read(b); 
 
    // 關(guān)閉輸入流 
 
    inputStream.close(); 
 
    // 在控制臺(tái)打印 
 
    System.out.println(new String(b)); 
 
  } 

如果以這種方式打印,我們可以看到雖然控制臺(tái)里是打印出了文本文件中的內(nèi)容,但是后面跟了很多空格,這是我們不需要的,對(duì)于這種情況我們有兩種解決方式

方式一:聲明字節(jié)數(shù)組的時(shí)候指定字節(jié)數(shù)組的長(zhǎng)度為文本內(nèi)容的長(zhǎng)度

byte[] b=new byte[(int)file.length()]; 

方式二:在將字節(jié)數(shù)組轉(zhuǎn)換成字符串的調(diào)用String(byte b,int off,int len)這個(gè)構(gòu)造函數(shù)

System.out.println(new String(b,0,(int)file.length()));

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • SpringBoot如何獲取客戶端的IP地址

    SpringBoot如何獲取客戶端的IP地址

    這篇文章主要介紹了SpringBoot如何獲取客戶端的IP地址問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中的ProcessBuilder類(lèi)詳細(xì)解析

    Java中的ProcessBuilder類(lèi)詳細(xì)解析

    這篇文章主要介紹了Java中的ProcessBuilder類(lèi)詳細(xì)解析,ProcessBuilder類(lèi)是J2SE 1.5在java.lang中新添加的一個(gè)新類(lèi),此類(lèi)用于創(chuàng)建操作系統(tǒng)進(jìn)程,它提供一種啟動(dòng)和管理進(jìn)程的方法,需要的朋友可以參考下
    2024-01-01
  • Java程序執(zhí)行的全流程

    Java程序執(zhí)行的全流程

    這篇文章主要介紹了Java程序執(zhí)行的全流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 通過(guò)實(shí)例了解Java 8創(chuàng)建Stream流的5種方法

    通過(guò)實(shí)例了解Java 8創(chuàng)建Stream流的5種方法

    這篇文章主要介紹了通過(guò)實(shí)例了解Java 8創(chuàng)建Stream流的5種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java后臺(tái)開(kāi)發(fā)之表單提交之前驗(yàn)證

    Java后臺(tái)開(kāi)發(fā)之表單提交之前驗(yàn)證

    這篇文章主要介紹了Java后臺(tái)開(kāi)發(fā)之表單提交之前驗(yàn)證的實(shí)現(xiàn)代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-02-02
  • 解決SpringBoot2.1.0+RocketMQ版本沖突問(wèn)題

    解決SpringBoot2.1.0+RocketMQ版本沖突問(wèn)題

    這篇文章主要介紹了解決SpringBoot2.1.0+RocketMQ版本沖突問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • java集合_淺談Iterable和Iterator的區(qū)別

    java集合_淺談Iterable和Iterator的區(qū)別

    下面小編就為大家?guī)?lái)一篇java集合_淺談Iterable和Iterator的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • Java中Map集合的常用方法詳解

    Java中Map集合的常用方法詳解

    本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于Java中Map集合的常用方法詳解,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。下面我們就來(lái)學(xué)習(xí)一下吧
    2021-11-11
  • SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)

    SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)

    這篇文章主要給大家介紹了SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中避免寫(xiě)嵌套if樣式的代碼詳解

    Java中避免寫(xiě)嵌套if樣式的代碼詳解

    這篇文章主要給大家介紹了在Java中如何避免寫(xiě)嵌套if樣式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07

最新評(píng)論

望都县| 民县| 余江县| 原阳县| 太白县| 斗六市| 常熟市| 乌拉特前旗| 永宁县| 宁陵县| 金山区| 洛扎县| 荆州市| 凤冈县| 融水| 彰武县| 平顶山市| 磴口县| 丹阳市| 三江| 长阳| 衡水市| 华亭县| 宣城市| 清水县| 乡城县| 蓬安县| 乳山市| 博客| 萝北县| 晋州市| 来安县| 北碚区| 苍山县| 新竹市| 巢湖市| 江门市| 竹山县| 夏河县| 信阳市| 松江区|