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

Java進階教程之IO基礎

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

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

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

相對的復雜性帶來的好處是IO的靈活性。在Java中,程序員可以控制IO的整個流程,從而設計出最好的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://m.fzitv.net/admin/Article_show.asp?id=54583">Java進階教程之 異常處理

 裝飾器與功能組合

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

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

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

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

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

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

 

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

 更多的組合

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

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

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

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

 java.io

 此外,IOException有如下衍生類:

IOException

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

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

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

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

 寫入

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

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對象,用于處理文件路徑。

總結

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

相關文章

  • Java 深入探討設計模式之原型模式篇

    Java 深入探討設計模式之原型模式篇

    設計模式(Design pattern)是一套被反復使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設計經(jīng)驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性
    2021-10-10
  • Java中的Unsafe在安全領域的使用總結和復現(xiàn)(實例詳解)

    Java中的Unsafe在安全領域的使用總結和復現(xiàn)(實例詳解)

    unsafe里面有很多好用的方法,比如allocateInstance可以直接創(chuàng)建實例對象,defineAnonymousClass可以創(chuàng)建一個VM匿名類(VM?Anonymous?Class),以及直接從內(nèi)存級別修改對象的值。這篇文章主要介紹了Java中的Unsafe在安全領域的一些應用總結和復現(xiàn),需要的朋友可以參考下
    2022-03-03
  • 淺談Java中實現(xiàn)深拷貝的兩種方式—clone() & Serialized

    淺談Java中實現(xiàn)深拷貝的兩種方式—clone() & Serialized

    這篇文章主要介紹了Java中實現(xiàn)深拷貝的兩種方式—clone() & Serialized,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Java 字符串拼接竟然有這么多姿勢(收藏版)

    Java 字符串拼接竟然有這么多姿勢(收藏版)

    這篇文章主要介紹了Java 字符串拼接竟然有這么多姿勢,很值得大家收藏,需要的朋友可以參考下
    2019-11-11
  • 搭建SpringBoot項目三種方式(圖文教程)

    搭建SpringBoot項目三種方式(圖文教程)

    Springboot作為當下最主流的java開發(fā)框架,已成為IT從業(yè)人員的入門必備技能,本文主要介紹了搭建SpringBoot項目三種方式,感興趣的可以了解一下
    2023-09-09
  • java 增強型for循環(huán)語法詳解

    java 增強型for循環(huán)語法詳解

    增強型 for 循環(huán)(也稱為 “for-each” 循環(huán))是 Java 從 JDK 5 開始引入的一種便捷循環(huán)語法,旨在簡化對數(shù)組或集合類的迭代操作,這篇文章主要介紹了java 增強型for循環(huán) 詳解,需要的朋友可以參考下
    2025-04-04
  • java hasNextInt判斷是否為數(shù)字的方法

    java hasNextInt判斷是否為數(shù)字的方法

    今天小編就為大家分享一篇java hasNextInt判斷是否為數(shù)字的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java設計模式:原始模型模式

    java設計模式:原始模型模式

    這篇文章主要為大家詳細介紹了Java設計模式之Prototype原型模式的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java 反射 動態(tài)調(diào)用不同類的靜態(tài)方法(推薦)

    java 反射 動態(tài)調(diào)用不同類的靜態(tài)方法(推薦)

    下面小編就為大家?guī)硪黄狫AVA 反射 動態(tài)調(diào)用不同類的靜態(tài)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java中判斷對象是否為空的不同方法

    Java中判斷對象是否為空的不同方法

    在Java編程中,經(jīng)常會遇到判斷對象是否為空的情況,本篇將深入探討Java中判斷對象是否為空的不同方法,包括使用條件判斷、使用Java 8的Optional類、使用Apache Commons Lang庫等,通過詳細的解釋和舉例說明,幫助讀者正確處理空對象問題,需要的朋友一起看看吧
    2023-11-11

最新評論

镇宁| 上思县| 洛南县| 紫云| 绥棱县| 思南县| 黄浦区| 育儿| 高邑县| 洛阳市| 南康市| 盐池县| 石狮市| 和平县| 溆浦县| 凌源市| 梁山县| 新余市| 张家港市| 桂阳县| 韶山市| 永丰县| 长海县| 太和县| 常州市| 利川市| 拜泉县| 台江县| 万载县| 中牟县| 澎湖县| 玛纳斯县| 林西县| 内丘县| 斗六市| 安阳市| 柞水县| 大同市| 涿鹿县| 凤台县| 渝北区|