<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                <!-- Appendix: I/O Streams --> # 附錄:流式IO > Java 7 引入了一種簡單明了的方式來讀寫文件和操作目錄。大多情況下,[文件](./17-Files.md)這一章所介紹的那些庫和技術就足夠你用了。但是,如果你必須面對一些特殊的需求和比較底層的操作,或者處理一些老版本的代碼,那么你就必須了解本附錄中的內容。 對于編程語言的設計者來說,實現良好的輸入/輸出(I/O)系統是一項比較艱難的任務,不同實現方案的數量就可以證明這點。其中的挑戰似乎在于要涵蓋所有的可能性,你不僅要覆蓋到不同的 I/O 源和 I/O 接收器(如文件、控制臺、網絡連接等),還要實現多種與它們進行通信的方式(如順序、隨機訪問、緩沖、二進制、字符、按行和按字等)。 Java 類庫的設計者通過創建大量的類來解決這一難題。一開始,你可能會對 Java I/O 系統提供了如此多的類而感到不知所措。Java 1.0 之后,Java 的 I/O 類庫發生了明顯的改變,在原來面向字節的類中添加了面向字符和基于 Unicode 的類。在 Java 1.4 中,為了改進性能和功能,又添加了 `nio` 類(全稱是 “new I/O”,Java 1.4 引入,到現在已經很多年了)。這部分在[附錄:新 I/O](./Appendix-New-IO.md) 中介紹。 因此,要想充分理解 Java I/O 系統以便正確運用它,我們需要學習一定數量的類。另外,理解 I/O 類庫的演化過程也很有必要,因為如果缺乏歷史的眼光,很快我們就會對什么時候該使用哪些類,以及什么時候不該使用它們而感到困惑。 編程語言的 I/O 類庫經常使用**流**這個抽象概念,它將所有數據源或者數據接收器表示為能夠產生或者接收數據片的對象。 > **注意**:Java 8 函數式編程中的 `Stream` 類和這里的 I/O stream 沒有任何關系。這又是另一個例子,如果再給設計者一次重來的機會,他們將使用不同的術語。 I/O 流屏蔽了實際的 I/O 設備中處理數據的細節: 1. 字節流對應原生的二進制數據; 2. 字符流對應字符數據,它會自動處理與本地字符集之間的轉換; 3. 緩沖流可以提高性能,通過減少底層 API 的調用次數來優化 I/O。 從 JDK 文檔的類層次結構中可以看到,Java 類庫中的 I/O 類分成了輸入和輸出兩部分。在設計 Java 1.0 時,類庫的設計者們就決定讓所有與輸入有關系的類都繼承自 `InputStream`,所有與輸出有關系的類都繼承自 `OutputStream`。所有從 `InputStream` 或 `Reader` 派生而來的類都含有名為 `read()` 的基本方法,用于讀取單個字節或者字節數組。同樣,所有從 `OutputStream` 或 `Writer` 派生而來的類都含有名為 `write()` 的基本方法,用于寫單個字節或者字節數組。但是,我們通常不會用到這些方法,它們之所以存在是因為別的類可以使用它們,以便提供更有用的接口。 我們很少使用單一的類來創建流對象,而是通過疊合多個對象來提供所期望的功能(這是**裝飾器設計模式**)。為了創建一個流,你卻要創建多個對象,這也是 Java I/O 類庫讓人困惑的主要原因。 這里我只會提供這些類的概述,并假定你會使用 JDK 文檔來獲取它們的詳細信息(比如某個類的所以方法的詳細列表)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看