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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                許多運行時值可以被序列化或反序列化,使用 haxe.Serializer 和 haxe.Unserializer 類。都支持兩種用法: 創建一個實例,并不斷的調用 serialize / unserialize 方法來處理多個值。 調用它們的靜態 run 方法來 序列化/反序列化 一個單獨的值。 下面的例子演示了第一種用法: ~~~ import haxe.Serializer; import haxe.Unserializer; class Main { static function main() { var serializer = new Serializer(); serializer.serialize("foo"); serializer.serialize(12); var s = serializer.toString(); trace(s); // y3:fooi12 var unserializer = new Unserializer(s); trace(unserializer.unserialize()); // foo trace(unserializer.unserialize()); // 12 } } ~~~ 序列化的結果(這里存儲在局部變量 s)是一個 String,并且可以被任意甚至遠程地傳遞。它的格式以 序列化格式(第10.8.1節)描述。 ## 支持的值 * null * Bool, Int 和 Float (包括無窮值和 NaN) * String * Date * haxe.io.Bytes (編碼為 base64) * Array 和 List * haxe.ds.StringMap, haxe.ds.IntMap 和 haxe.ds.ObjectMap * 匿名結構 * Haxe 類實例(并不是原生的) * 枚舉實例 ## 序列化配置 序列化可以以兩種方式配置。對于一個靜態變量,可以被設置來改變所有 haxe.Serializer 實例,一個成員變量可以被設置來影響一個特定實例: * USE_CACHE,userCache : 如果為 true,重復的結構或類/枚舉實例被參照序列化。這可以避免遞歸數據的無限循環更長的序列化時間。默認,對象緩存是禁用的;然而字符串總是被緩存。 * USE_ENUM_INDEX,useEnumIndex : 如果為 true ,枚舉構造函數被它們的索引序列化而不是它們的名字。這可以使結果字符串更短,但是如果 枚舉構造函數在反序列化之前被插入到這個類型,將會打斷。這個行為默認是禁止的。 ## 反序列化行為 如果序列化結果被存儲,之后使用于反序列化,必須注意當使用類和枚舉實例時要保持兼容性。之后重要的是準確理解反序列化如何實現的。 * 做反序列化的地方類型必須在運行時可以獲得的。如果無用代碼消除被激活,只是通過序列化使用的類型可能會被刪除。 * 每個 Unserializer 都有一個成員變量 resolver ,用于通過名字解析類和枚舉。Unserializer 一經創建,它被設置為 Unserializer.DEFAULT_RESOLVER 。它和實例成員都可以被設置為一個定制 分析器。 * 類使用 resolver.resolveClass(name) 通過名字解析。實例然后被使用 Type.createEmptyInstance 創建,這意味著 這個類構造函數沒有被調用。最終,實例字段根據序列化的值被設置。 * 枚舉使用 resolver.resolveEnum(name)通過名字及誒系。枚舉實例然后被使用 Type.createEnum創建,如果可用,則使用序列化的參數值。如果構造函數參數由于序列化被改變,結果是未指定的。 ## 自定義的(反)序列化 如果一個類定義了成員方法 hxSerialize,這個方法被序列化器調用,允許對類的自定義序列化。同樣,如果一個類定義了成員方法 hxUnserialize,它被反序列化器調用: ~~~ import haxe.Serializer; import haxe.Unserializer; class Main { var x:Int; var y:Int; static function main() { var s = Serializer.run(new Main(1, 2)); var c:Main = Unserializer.run(s); trace(c.x); // 1 trace(c.y); // -1 } function new(x, y) { this.x = x; this.y = y; } @:keep function hxSerialize(s:Serializer) { s.serialize(x); } @:keep function hxUnserialize(u:Unserializer) { x = u.unserialize(); y = -1; } } ~~~ 在這個例子中,我們決定要忽略成員變量 y的值,并且不序列化它。相反,我們在 hxUnserialize中默認它為 -1 。兩個方法都使用 @:keep 元數據注解,以防止無用代碼消除刪除它們,因為它們在代碼中從未恰當的引用。 查看 Serializer 和 Unserializer API 文檔了解詳細內容。
                  <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>

                              哎呀哎呀视频在线观看