<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 存儲和恢復數據 `PrintWriter` 是用來對可讀的數據進行格式化。但如果要輸出可供另一個“流”恢復的數據,我們可以用 `DataOutputStream` 寫入數據,然后用 `DataInputStream` 恢復數據。當然,這些流可能是任何形式,在下面的示例中使用的是一個文件,并且對讀寫都進行了緩沖。注意 `DataOutputStream` 和 `DataInputStream` 是面向字節的,因此要使用 `InputStream` 和 `OutputStream` 體系的類。 ```java // iostreams/StoringAndRecoveringData.java import java.io.*; public class StoringAndRecoveringData { public static void main(String[] args) { try ( DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("Data.txt"))) ) { out.writeDouble(3.14159); out.writeUTF("That was pi"); out.writeDouble(1.41413); out.writeUTF("Square root of 2"); } catch (IOException e) { throw new RuntimeException(e); } try ( DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream("Data.txt"))) ) { System.out.println(in.readDouble()); // Only readUTF() will recover the // Java-UTF String properly: System.out.println(in.readUTF()); System.out.println(in.readDouble()); System.out.println(in.readUTF()); } catch (IOException e) { throw new RuntimeException(e); } } } ``` 輸出結果: ``` 3.14159 That was pi 1.41413 Square root of 2 ``` 如果我們使用 `DataOutputStream` 進行數據寫入,那么 Java 就保證了即便讀和寫數據的平臺多么不同,我們仍可以使用 `DataInputStream` 準確地讀取數據。這一點很有價值,眾所周知,人們曾把大量精力耗費在數據的平臺相關性問題上。但現在,只要兩個平臺上都有 Java,就不會存在這樣的問題[^3]。 當我們使用 `DastaOutputStream` 時,寫字符串并且讓 `DataInputStream` 能夠恢復它的唯一可靠方式就是使用 UTF-8 編碼,在這個示例中是用 `writeUTF()` 和 `readUTF()` 來實現的。UTF-8 是一種多字節格式,其編碼長度根據實際使用的字符集會有所變化。如果我們使用的只是 ASCII 或者幾乎都是 ASCII 字符(只占 7 比特),那么就顯得及其浪費空間和帶寬,所以 UTF-8 將 ASCII 字符編碼成一個字節的形式,而非 ASCII 字符則編碼成兩到三個字節的形式。另外,字符串的長度保存在 UTF-8 字符串的前兩個字節中。但是,`writeUTF()` 和 `readUTF()` 使用的是一種適用于 Java 的 UTF-8 變體(JDK 文檔中有這些方法的詳盡描述),因此如果我們用一個非 Java 程序讀取用 `writeUTF()` 所寫的字符串時,必須編寫一些特殊的代碼才能正確讀取。 有了 `writeUTF()` 和 `readUTF()`,我們就可以在 `DataOutputStream` 中把字符串和其它數據類型混合使用。因為字符串完全可以作為 Unicode 格式存儲,并且可以很容易地使用 `DataInputStream` 來恢復它。 `writeDouble()` 將 `double` 類型的數字存儲在流中,并用相應的 `readDouble()` 恢復它(對于其它的書類型,也有類似的方法用于讀寫)。但是為了保證所有的讀方法都能夠正常工作,我們必須知道流中數據項所在的確切位置,因為極有可能將保存的 `double` 數據作為一個簡單的字節序列、`char` 或其它類型讀入。因此,我們必須:要么為文件中的數據采用固定的格式;要么將額外的信息保存到文件中,通過解析額外信息來確定數據的存放位置。注意,對象序列化和 XML (二者都在[附錄:對象序列化](Appendix-Object-Serialization.md)中介紹)是存儲和讀取復雜數據結構的更簡單的方式。
                  <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>

                              哎呀哎呀视频在线观看