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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 將 Java 對象序列化為 XML – `XMLEncoder`和`XMLDecoder`示例 > 原文: [https://howtodoinjava.com/java/serialization/xmlencoder-and-xmldecoder-example/](https://howtodoinjava.com/java/serialization/xmlencoder-and-xmldecoder-example/) 默認的 Java 序列化將 Java 對象轉換為字節以通過網絡發送。 但是很多時候,您將需要更多的跨平臺媒體來發送此信息,例如 XML,以便使用不同技術的應用程序也可以利用此序列化信息的優勢。 在此示例中,我們將學習將 Java 對象序列化為 XML 文件,然后反序列化回原始 Java 對象。 為了演示用法,我創建了一個具有 3 個字段的類`UserSettings`,我們將**序列化為 xml**,然后**將 xml 反序列化為 Java 對象**。 ```java public class UserSettings { public UserSettings(){} private Integer fieldOne; private String fieldTwo; private boolean fieldThree; public Integer getFieldOne() { return fieldOne; } public void setFieldOne(Integer fieldOne) { this.fieldOne = fieldOne; } public String getFieldTwo() { return fieldTwo; } public void setFieldTwo(String fieldTwo) { this.fieldTwo = fieldTwo; } public boolean isFieldThree() { return fieldThree; } public void setFieldThree(boolean fieldThree) { this.fieldThree = fieldThree; } @Override public String toString() { return "UserSettings [fieldOne=" + fieldOne + ", fieldTwo=" + fieldTwo + ", fieldThree=" + fieldThree + "]"; } } ``` ## 使用`XMLEncoder`從 Java 對象序列化為 XML 文件 首先來看[`XMLEncoder`](https://docs.oracle.com/javase/8/docs/api/java/beans/XMLEncoder.html)類的示例,該類用于將 Java 對象序列化或編碼為 XML 文件。 ```java private static void serializeToXML (UserSettings settings) throws IOException { FileOutputStream fos = new FileOutputStream("settings.xml"); XMLEncoder encoder = new XMLEncoder(fos); encoder.setExceptionListener(new ExceptionListener() { public void exceptionThrown(Exception e) { System.out.println("Exception! :"+e.toString()); } }); encoder.writeObject(settings); encoder.close(); fos.close(); } ``` `XMLEncoder`使用反射來找出它們包含哪些字段,但不是以二進制形式編寫這些字段,而是以 XML 編寫。 待編碼的對象不需要是[可序列化的](//howtodoinjava.com/java/serialization/a-mini-guide-for-implementing-serializable-interface-in-java/),但是它們確實需要遵循 [Java Beans 規范](https://docs.oracle.com/javase/tutorial/javabeans/writing/index.html),例如 1. 該對象具有一個公共的空(無參數)構造器。 2. 該對象具有每個受保護/私有財產的公共獲取器和設置器。 運行以上代碼將生成具有以下內容的 XML 文件: ```java <?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0_92" class="java.beans.XMLDecoder"> <object class="com.howtodoinjava.log4j2.examples.UserSettings"> <void property="fieldOne"> <int>10000</int> </void> <void property="fieldTwo"> <string>HowToDoInJava.com</string> </void> </object> </java> ``` 請注意,如果要寫入的對象的屬性的默認值未更改,則`XmlEncoder`不會將其寫出。 例如,在我們的示例中,**第三個字段**的類型為`boolean`,其默認值為`false` – 因此,它已從 XML 內容中省略。 這樣可以靈活地更改類版本之間的*默認*值。 ## 使用`XMLDecoder`反序列化從 XML 到 Java 對象 現在,我們來看一下[`XMLDecoder`](https://docs.oracle.com/javase/8/docs/api/java/beans/XMLDecoder.html)的示例,該示例已用于將 xml 文件反序列化為 java 對象。 ```java private static UserSettings deserializeFromXML() throws IOException { FileInputStream fis = new FileInputStream("settings.xml"); XMLDecoder decoder = new XMLDecoder(fis); UserSettings decodedSettings = (UserSettings) decoder.readObject(); decoder.close(); fis.close(); return decodedSettings; } ``` `XMLEncoder`和`XMLDecoder`比序列化框架寬容得多。 解碼時,如果屬性更改了類型,或者屬性被刪除/添加/移動/重命名,則解碼將“盡其所能”進行解碼,同時跳過無法解碼的屬性。 ## 完整的例子 讓我們看一下使用`XMLEncoder`和`XMLDecoder`的整個示例。 ```java import java.beans.ExceptionListener; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class XMLEncoderDecoderExample { public static void main(String[] args) throws IOException { UserSettings settings = new UserSettings(); settings.setFieldOne(10000); settings.setFieldTwo("HowToDoInJava.com"); settings.setFieldThree(false); //Before System.out.println(settings); serializeToXML ( settings ); UserSettings loadedSettings = deserializeFromXML(); //After System.out.println(loadedSettings); } private static void serializeToXML (UserSettings settings) throws IOException { FileOutputStream fos = new FileOutputStream("settings.xml"); XMLEncoder encoder = new XMLEncoder(fos); encoder.setExceptionListener(new ExceptionListener() { public void exceptionThrown(Exception e) { System.out.println("Exception! :"+e.toString()); } }); encoder.writeObject(settings); encoder.close(); fos.close(); } private static UserSettings deserializeFromXML() throws IOException { FileInputStream fis = new FileInputStream("settings.xml"); XMLDecoder decoder = new XMLDecoder(fis); UserSettings decodedSettings = (UserSettings) decoder.readObject(); decoder.close(); fis.close(); return decodedSettings; } } ``` ```java Output: UserSettings [fieldOne=10000, fieldTwo=HowToDoInJava.com, fieldThree=false] UserSettings [fieldOne=10000, fieldTwo=HowToDoInJava.com, fieldThree=false] ``` 將我的問題放在評論部分。 學習愉快!
                  <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>

                              哎呀哎呀视频在线观看