亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java進(jìn)階教程之IO基礎(chǔ)

 更新時間:2014年09月01日 13:06:05   作者:Vamei  
這篇文章主要介紹了Java進(jìn)階教程之IO基礎(chǔ),這里只是對Java IO的基本介紹,包含讀取和寫入等操作,需要的朋友可以參考下

計算機(jī)最重要的功能是處理數(shù)據(jù)。一個有用的計算機(jī)語言需要擁有良好的IO功能,以便讓未處理的數(shù)據(jù)流入程序,讓已處理的數(shù)據(jù)流出。

與其他語言相比,Java的IO功能顯得復(fù)雜。在其他語言中,許多IO功能(比如讀取文件),是被封裝好的,可以用一兩行程序?qū)崿F(xiàn)。在Java中,程序員往往需要多個層次的裝飾(decoration),才能實現(xiàn)文件讀取。

相對的復(fù)雜性帶來的好處是IO的靈活性。在Java中,程序員可以控制IO的整個流程,從而設(shè)計出最好的IO方式。我們將在下文看到更多。

 IO示例

 下面是我用于演示的文件file.txt

Hello World!
Hello Nerd!

我們先來研究一個文件讀取的例子:

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      BufferedReader br =
       new BufferedReader(new FileReader("file.txt")); 

      String line = br.readLine();

      while (line != null) {
        System.out.println(line);
        line = br.readLine();
      }
      br.close();
    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

這段程序中包含一個try...catch...finally的異常處理器??蓞⒖?a id="homepage1_HomePageDays_DaysList_DayItem_0_DayList_0_TitleUrl_0" target="_blank" href="http://chabaoo.cn/admin/Article_show.asp?id=54583">Java進(jìn)階教程之 異常處理

 裝飾器與功能組合

程序IO的關(guān)鍵在于創(chuàng)建BufferedReader對象br:

  BufferedReader br = new BufferedReader(new FileReader("file.txt"));

在創(chuàng)建的過程中,我們先建立了一個FileReader對象,這個對象的功能是從文件"file.txt"中讀取字節(jié)(byte)流,并轉(zhuǎn)換為文本流。在Java中,標(biāo)準(zhǔn)的文本編碼方式為unicode。BufferedReader()接收該FileReader對象,并拓展FileReader的功能,新建出一個BufferedReader對象。該對象除了有上述的文件讀取和轉(zhuǎn)換的功能外,還提供了緩存讀取(buffered)的功能。最后,我們通過對br對象調(diào)用readLine()方法,可以逐行的讀取文件。

(緩存讀取是在內(nèi)存中開辟一片區(qū)域作為緩存,該區(qū)域存放FileReader讀出的文本流。當(dāng)該緩存的內(nèi)容被讀走后(比如readLine()命令),緩存會加載后續(xù)的文本流。)

BufferedReader()是一個裝飾器(decorator),它接收一個原始的對象,并返回一個經(jīng)過裝飾的、功能更復(fù)雜的對象。修飾器的好處是,它可以用于修飾不同的對象。我們這里被修飾的是從文件中讀取的文本流。其他的文本流,比如標(biāo)準(zhǔn)輸入,網(wǎng)絡(luò)傳輸?shù)牧鞯鹊?,都可以被BufferedReader()修飾,從而實現(xiàn)緩存讀取。

 下圖顯示了br的工作方式,數(shù)據(jù)自下而上流動:

 

上述的裝飾過程與Linux中的文本流思想很相似。在Linux中,我們使用類似函數(shù)的方式來處理和傳遞文本流。在Java中,我們使用了裝飾器。但它們的目的都類似,就是實現(xiàn)功能的模塊化和自由組合。

 更多的組合

事實上,Java提供了豐富的裝飾器。FileReader中合并了讀取和轉(zhuǎn)換兩個步驟,并采用了常用的默認(rèn)設(shè)置,比如編碼采取unicode。我們可以使用FileInputStream + InputStreamReader的組合來替代FileReader,從而分離讀取字節(jié)和轉(zhuǎn)換兩個步驟,并對兩個過程有更好的控制。

(當(dāng)然,F(xiàn)ileReader的使用更加方便。InputStreamReader是將FileInputStream轉(zhuǎn)換成一個Reader,用于處理unicode文本)

箭頭表示數(shù)據(jù)流動方向

 流的讀寫來自于四個基類: InputStream, OutputStream, Reader和Writer。InputStream和Reader是處理讀取操作,OutputStream和Writer是處理寫入操作。它們都位于java.io包中。繼承關(guān)系如下:

 java.io

 此外,IOException有如下衍生類:

IOException

 Reader和Writer及其衍生類是處理unicode文本。如我們看到的Buffered Reader, InputStreamReader或者FileReader。

InputStream和OutputStream及其衍生類是處理字節(jié)(byte)流。計算機(jī)中的數(shù)據(jù)都可以認(rèn)為是字節(jié)形式,所以InputStream和OutputStream可用于處理更加廣泛的數(shù)據(jù)。比如我們可以使用下面的組合來讀取壓縮文件中包含的數(shù)據(jù)(比如整數(shù)):

箭頭表示數(shù)據(jù)流動方向

 我們從壓縮文件中讀出字節(jié)流,然后解壓縮,最終讀出數(shù)據(jù)。

 寫入

寫入(write)操作與讀取操作相似。我們可以通過使用裝飾,實現(xiàn)復(fù)雜的寫入功能。這里是一個簡單的寫入文本的例子:

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      String content = "Thank you for your fish.";

      File file = new File("new.txt");

      // create the file if doesn't exists
      if (!file.exists()) {
        file.createNewFile();
      }

      FileWriter fw = new FileWriter(file.getAbsoluteFile());
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write(content);
      bw.close();

    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}

上面創(chuàng)建了file對象,用于處理文件路徑。

總結(jié)

這里只是對Java IO的基本介紹。Java的IO相對比較復(fù)雜。Java程序員需要花一些時間來熟悉java.io中的類及其功能。

相關(guān)文章

  • SpringBoot actuator 健康檢查不通過的解決方案

    SpringBoot actuator 健康檢查不通過的解決方案

    這篇文章主要介紹了SpringBoot actuator 健康檢查不通過的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • mybatis if標(biāo)簽使用總結(jié)

    mybatis if標(biāo)簽使用總結(jié)

    這篇文章主要介紹了mybatis if標(biāo)簽使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 一篇文章帶你入門java網(wǎng)絡(luò)編程

    一篇文章帶你入門java網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫運(yùn)行在多個設(shè)備(計算機(jī))的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。本文介紹了一些網(wǎng)絡(luò)編程基礎(chǔ)的概念,并用Java來實現(xiàn)TCP和UDP的Socket的編程,來讓讀者更好的了解其原理
    2021-08-08
  • java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    這篇文章主要介紹了java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring標(biāo)準(zhǔn)的xml文件頭實例分析

    Spring標(biāo)準(zhǔn)的xml文件頭實例分析

    這篇文章主要介紹了Spring標(biāo)準(zhǔn)的xml文件頭實例分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Arthas排查Kubernetes中應(yīng)用頻繁掛掉重啟異常

    Arthas排查Kubernetes中應(yīng)用頻繁掛掉重啟異常

    這篇文章主要為大家介紹了Arthas排查Kubernetes中應(yīng)用頻繁掛掉重啟的異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-02-02
  • Spring 異常單元測試的解決

    Spring 異常單元測試的解決

    這篇文章主要介紹了Spring 異常單元測試的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • SpringDataJpa like查詢無效的解決

    SpringDataJpa like查詢無效的解決

    這篇文章主要介紹了SpringDataJpa like查詢無效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java獲取http請求的Header和Body的簡單方法

    java獲取http請求的Header和Body的簡單方法

    下面小編就為大家?guī)硪黄猨ava獲取http請求的Header和Body的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Java從零編寫汽車租賃系統(tǒng)全程分析

    Java從零編寫汽車租賃系統(tǒng)全程分析

    這篇文章介紹了Java實現(xiàn)汽車租賃系統(tǒng)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論