| <!doctype html><html lang=en-US dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-0.13 docs-doc-page docs-doc-id-guide/python_serialization" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.1"><title data-rh=true>Python Serialization | Apache Fory™</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true property=og:url content=https://fory.apache.org/docs/0.13/guide/python_serialization /><meta data-rh=true property=og:locale content=en_US /><meta data-rh=true property=og:locale:alternate content=zh_CN /><meta data-rh=true name=docusaurus_locale content=en-US /><meta data-rh=true name=docsearch:language content=en-US /><meta data-rh=true http-equiv=Content-Security-Policy content="frame-src 'self' https://ghbtns.com/;"/><meta data-rh=true property=og:image content=https://fory.apache.org/img/logo.png /><meta data-rh=true property=og:image:width content=1500 /><meta data-rh=true property=og:image:height content=1500 /><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true name=twitter:image content=https://fory.apache.org/img/logo.png /><meta data-rh=true name=docusaurus_version content=0.13 /><meta data-rh=true name=docusaurus_tag content=docs-default-0.13 /><meta data-rh=true name=docsearch:version content=0.13 /><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-0.13 /><meta data-rh=true property=og:title content="Python Serialization | Apache Fory™"/><meta data-rh=true name=description content="Apache Fory™ Python"/><meta data-rh=true property=og:description content="Apache Fory™ Python"/><link data-rh=true rel=icon href=/img/favicon.ico /><link data-rh=true rel=canonical href=https://fory.apache.org/docs/0.13/guide/python_serialization /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/0.13/guide/python_serialization hreflang=en-US /><link data-rh=true rel=alternate href=https://fory.apache.org/zh-CN/docs/0.13/guide/python_serialization hreflang=zh-CN /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/0.13/guide/python_serialization hreflang=x-default /><script data-rh=true type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://fory.apache.org/docs/0.13/guide/python_serialization","name":"Python Serialization","position":1}]}</script><link rel=alternate type=application/rss+xml href=/blog/rss.xml title="Apache Fory™ RSS Feed"><link rel=alternate type=application/atom+xml href=/blog/atom.xml title="Apache Fory™ Atom Feed"><script type=text/javascript>"fury.apache.org"===window.location.host&&(window.location.href="https://fory.apache.org"),function(){for(var o=window.location.pathname,a=["guide","introduction","start"],n=0;n<a.length;n++){var t=a[n],i=RegExp("^((?:/[a-z]{2}-[A-Z]{2})?/docs(?:/(?:next|[0-9]+.[0-9]+))?)/docs/"+t+"(/.*)?$"),c=o.match(i);if(c){var r=c[1]+"/"+t+(c[2]||"");window.location.replace(r+window.location.search+window.location.hash);return}}}()</script><link rel=stylesheet href=/assets/css/styles.3a1edaa1.css /><script src=/assets/js/runtime~main.605b11b1.js defer></script><script src=/assets/js/main.283fea4b.js defer></script></head><body><svg style="display: none;"><defs> |
| <symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol> |
| </defs></svg> |
| <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><div role=region aria-label="Skip to main content"><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="theme-layout-navbar navbar navbar--fixed-top"><div class=navbar__inner><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/><div class=navbar__logo><img src=/img/fory-logo-light.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"/><img src=/img/fory-logo-dark.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"/></div><b class="navbar__title text--truncate"></b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/docs/0.13/introduction/overview>Docs</a><a class="navbar__item navbar__link" href=/docs/0.13/specification/xlang_serialization_spec>Specification</a><a class="navbar__item navbar__link" href=/docs/0.13/community/>Community</a><a class="navbar__item navbar__link" href=/user>Users</a><a class="navbar__item navbar__link" href=/download>Download</a><a class="navbar__item navbar__link" href=/blog>Blog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>ASF</a><ul class=dropdown__menu><li><a href=https://www.apache.org/ target=_blank rel="noopener noreferrer" class=dropdown__link>Foundation</a><li><a href=https://www.apache.org/licenses/ target=_blank rel="noopener noreferrer" class=dropdown__link>License</a><li><a href=https://www.apache.org/events/current-event.html target=_blank rel="noopener noreferrer" class=dropdown__link>Events</a><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html target=_blank rel="noopener noreferrer" class=dropdown__link>Privacy</a><li><a href=https://www.apache.org/security/ target=_blank rel="noopener noreferrer" class=dropdown__link>Security</a><li><a href=https://www.apache.org/foundation/sponsorship.html target=_blank rel="noopener noreferrer" class=dropdown__link>Sponsorship</a><li><a href=https://www.apache.org/foundation/thanks.html target=_blank rel="noopener noreferrer" class=dropdown__link>Thanks</a><li><a href=https://www.apache.org/foundation/policies/conduct.html target=_blank rel="noopener noreferrer" class=dropdown__link>Code of Conduct</a></ul></div><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class=navbar__link aria-haspopup=true aria-expanded=false role=button href=/docs/0.13/guide/python_serialization>0.13</a><ul class=dropdown__menu><li><a class=dropdown__link href=/docs/next/introduction/overview>dev</a><li><a class=dropdown__link href=/docs/introduction/overview>1.3.0</a><li><a class=dropdown__link href=/docs/1.2.0/introduction/overview>1.2.0</a><li><a class=dropdown__link href=/docs/1.1.0/introduction/overview>1.1.0</a><li><a class=dropdown__link href=/docs/1.0.0/introduction/overview>1.0.0</a><li><a class=dropdown__link href=/docs/0.17/introduction/overview>0.17</a><li><a class=dropdown__link href=/docs/0.16/introduction/overview>0.16</a><li><a class=dropdown__link href=/docs/0.15/introduction/overview>0.15</a><li><a class=dropdown__link href=/docs/0.14/introduction/overview>0.14</a><li><a aria-current=page class="dropdown__link dropdown__link--active" href=/docs/0.13/guide/python_serialization>0.13</a><li><a class=dropdown__link href=/docs/0.12/introduction/overview>0.12</a><li><a class=dropdown__link href=/docs/0.11/introduction/overview>0.11</a><li><a class=dropdown__link href=/docs/0.10/introduction/overview>0.10</a></ul></div><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link><svg viewBox="0 0 24 24" width=20 height=20 aria-hidden=true class=iconLanguage_nlXk><path fill=currentColor d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>English</a><ul class=dropdown__menu><li><a href=/docs/0.13/guide/python_serialization target=_self rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang=en-US>English</a><li><a href=/zh-CN/docs/0.13/guide/python_serialization target=_self rel="noopener noreferrer" class=dropdown__link lang=zh-CN>简体中文</a></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type=button disabled title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill=currentColor d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill=currentColor d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill=currentColor d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"/></svg></button></div><div class=navbarSearchContainer_Bca1><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled/></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class=docsWrapper_hBAB><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type=button></button><div class=docRoot_UBD9><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class=sidebarViewport_aRkj><div class=sidebar_njMd><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" href=/docs/0.13/introduction/overview><span title=Introduction class=categoryLinkLabel_W154>Introduction</span></a><button aria-label="Expand sidebar category 'Introduction'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/0.13/start/install><span title=Start class=categoryLinkLabel_W154>Start</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role=button aria-expanded=true href=/docs/0.13/guide/serialization><span title=Guide class=categoryLinkLabel_W154>Guide</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/0.13/guide/serialization><span title="Java Serialization Guide" class=linkLabel_WmDU>Java Serialization Guide</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/docs/0.13/guide/python_serialization><span title="Python Serialization" class=linkLabel_WmDU>Python Serialization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/0.13/guide/rust_serialization><span title="Rust Serialization" class=linkLabel_WmDU>Rust Serialization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/0.13/guide/scala_serialization><span title="Scala Serialization" class=linkLabel_WmDU>Scala Serialization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/0.13/guide/xlang_serialization><span title="Xlang Serialization" class=linkLabel_WmDU>Xlang Serialization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/0.13/guide/row_format><span title="Row Format" class=linkLabel_WmDU>Row Format</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/0.13/guide/graalvm_serialization><span title="GraalVM Serialization" class=linkLabel_WmDU>GraalVM Serialization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/0.13/guide/development><span title=Development class=linkLabel_WmDU>Development</span></a></ul></ul></nav></div></div></aside><main class=docMainContainer_TBSr><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_VOVn"><div class="theme-doc-version-banner alert alert--warning margin-bottom--md" role=alert><div>This is documentation for <!-- -->Apache Fory™<!-- --> <b>0.13</b>, which is no longer actively maintained.</div><div class=margin-top--md>For up-to-date documentation, see the <b><a href=/docs/introduction/overview>latest version</a></b> (<!-- -->1.3.0<!-- -->).</div></div><div class=docItemContainer_Djhp><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label=Breadcrumbs><ul class=breadcrumbs><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_YNFT><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li class=breadcrumbs__item><span class=breadcrumbs__link>Guide</span><li class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link>Python Serialization</span></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: 0.13</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type=button class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Python Serialization</h1></header><h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=apache-fory-python>Apache Fory™ Python<a href=#apache-fory-python class=hash-link aria-label="Direct link to Apache Fory™ Python" title="Direct link to Apache Fory™ Python" translate=no></a></h2> |
| <p><strong>Apache Fory™</strong> is a blazing fast multi-language serialization framework powered by <strong>JIT compilation</strong> and <strong>zero-copy</strong> techniques, providing up to <strong>ultra-fast performance</strong> while maintaining ease of use and safety.</p> |
| <p><code>pyfory</code> provides the Python implementation of Apache Fory™, offering both high-performance object serialization and advanced row-format capabilities for data processing tasks.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-key-features>🚀 Key Features<a href=#-key-features class=hash-link aria-label="Direct link to 🚀 Key Features" title="Direct link to 🚀 Key Features" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=-flexible-serialization-modes>🔧 <strong>Flexible Serialization Modes</strong><a href=#-flexible-serialization-modes class=hash-link aria-label="Direct link to -flexible-serialization-modes" title="Direct link to -flexible-serialization-modes" translate=no></a></h3> |
| <ul> |
| <li class=""><strong>Python native Mode</strong>: Full Python compatibility, drop-in replacement for pickle/cloudpickle</li> |
| <li class=""><strong>Cross-Language Mode</strong>: Optimized for multi-language data exchange</li> |
| <li class=""><strong>Row Format</strong>: Zero-copy row format for analytics workloads</li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=-versatile-serialization-features>🎯 Versatile Serialization Features<a href=#-versatile-serialization-features class=hash-link aria-label="Direct link to 🎯 Versatile Serialization Features" title="Direct link to 🎯 Versatile Serialization Features" translate=no></a></h3> |
| <ul> |
| <li class=""><strong>Shared/circular reference support</strong> for complex object graphs in both Python-native and cross-language modes</li> |
| <li class=""><strong>Polymorphism support</strong> for customized types with automatic type dispatching</li> |
| <li class=""><strong>Schema evolution</strong> support for backward/forward compatibility when using dataclasses in cross-language mode</li> |
| <li class=""><strong>Out-of-band buffer support</strong> for zero-copy serialization of large data structures like NumPy arrays and Pandas DataFrames, compatible with pickle protocol 5</li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=-blazing-fast-performance>⚡ <strong>Blazing Fast Performance</strong><a href=#-blazing-fast-performance class=hash-link aria-label="Direct link to -blazing-fast-performance" title="Direct link to -blazing-fast-performance" translate=no></a></h3> |
| <ul> |
| <li class=""><strong>Extremely fast performance</strong> compared to other serialization frameworks</li> |
| <li class=""><strong>Runtime code generation</strong> and <strong>Cython-accelerated</strong> core implementation for optimal performance</li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=-compact-data-size>📦 Compact Data Size<a href=#-compact-data-size class=hash-link aria-label="Direct link to 📦 Compact Data Size" title="Direct link to 📦 Compact Data Size" translate=no></a></h3> |
| <ul> |
| <li class=""><strong>Compact object graph protocol</strong> with minimal space overhead—up to 3× size reduction compared to pickle/cloudpickle</li> |
| <li class=""><strong>Meta packing and sharing</strong> to minimize type forward/backward compatibility space overhead</li> |
| </ul> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=️-security--safety>🛡️ <strong>Security & Safety</strong><a href=#️-security--safety class=hash-link aria-label="Direct link to ️-security--safety" title="Direct link to ️-security--safety" translate=no></a></h3> |
| <ul> |
| <li class=""><strong>Strict mode</strong> prevents deserialization of untrusted types by type registration and checks.</li> |
| <li class=""><strong>Reference tracking</strong> for handling circular references safely</li> |
| </ul> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-installation>📦 Installation<a href=#-installation class=hash-link aria-label="Direct link to 📦 Installation" title="Direct link to 📦 Installation" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=basic-installation>Basic Installation<a href=#basic-installation class=hash-link aria-label="Direct link to Basic Installation" title="Direct link to Basic Installation" translate=no></a></h3> |
| <p>Install pyfory using pip:</p> |
| <div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">pip </span><span class="token function" style=color:#d73a49>install</span><span class="token plain"> pyfory</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=optional-dependencies>Optional Dependencies<a href=#optional-dependencies class=hash-link aria-label="Direct link to Optional Dependencies" title="Direct link to Optional Dependencies" translate=no></a></h3> |
| <div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Install with row format support (requires Apache Arrow)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pip </span><span class="token function" style=color:#d73a49>install</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">format</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Install from source for development</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>git</span><span class="token plain"> clone https://github.com/apache/fory.git</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> fory/python</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pip </span><span class="token function" style=color:#d73a49>install</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-e</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>".[dev,format]"</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=requirements>Requirements<a href=#requirements class=hash-link aria-label="Direct link to Requirements" title="Direct link to Requirements" translate=no></a></h3> |
| <ul> |
| <li class=""><strong>Python</strong>: 3.8 or higher</li> |
| <li class=""><strong>OS</strong>: Linux, macOS, Windows</li> |
| </ul> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-python-native-serialization>🐍 Python Native Serialization<a href=#-python-native-serialization class=hash-link aria-label="Direct link to 🐍 Python Native Serialization" title="Direct link to 🐍 Python Native Serialization" translate=no></a></h2> |
| <p><code>pyfory</code> provides a Python-native serialization mode that offers the same functionality as pickle/cloudpickle, but with <strong>significantly better performance, smaller data size, and enhanced security features</strong>.</p> |
| <p>The binary protocol and API are similar to Fory's xlang mode, but Python-native mode can serialize any Python object—including global functions, local functions, lambdas, local classes and types with customized serialization using <code>__getstate__/__reduce__/__reduce_ex__</code>, which are not allowed in xlang mode.</p> |
| <p>To use Python-native mode, create <code>Fory</code> with <code>xlang=False</code>. This mode is optimized for pure Python applications:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=basic-object-serialization>Basic Object Serialization<a href=#basic-object-serialization class=hash-link aria-label="Direct link to Basic Object Serialization" title="Direct link to Basic Object Serialization" translate=no></a></h3> |
| <p>Serialize and deserialize Python objects with a simple API. This example shows serializing a dictionary with mixed types:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create Fory instance</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Serialize any Python object</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>"name"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"age"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>30</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"scores"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>95</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>87</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>92</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Deserialize back to Python object</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">obj </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># {'name': 'Alice', 'age': 30, 'scores': [95, 87, 92]}</span><br/></div></code></pre></div></div> |
| <p><strong>Note</strong>: <code>dumps()</code>/<code>loads()</code> are aliases for <code>serialize()</code>/<code>deserialize()</code>. Both APIs are identical, use whichever feels more intuitive.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=custom-class-serialization>Custom Class Serialization<a href=#custom-class-serialization class=hash-link aria-label="Direct link to Custom Class Serialization" title="Direct link to Custom Class Serialization" translate=no></a></h3> |
| <p>Fory automatically handles dataclasses and custom types. Register your class once, then serialize instances seamlessly:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> dataclasses </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> dataclass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> typing </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Dict</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> scores</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>[</span><span class="token builtin">int</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> metadata</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Dict</span><span class="token punctuation" style=color:#393A34>[</span><span class="token builtin">str</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Python mode - supports all Python types including dataclasses</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Bob"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>25</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>88</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>92</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>85</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>"team"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"engineering"</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">result</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Person(name='Bob', age=25, ...)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=drop-in-replacement-for-picklecloudpickle>Drop-in Replacement for Pickle/Cloudpickle<a href=#drop-in-replacement-for-picklecloudpickle class=hash-link aria-label="Direct link to Drop-in Replacement for Pickle/Cloudpickle" title="Direct link to Drop-in Replacement for Pickle/Cloudpickle" translate=no></a></h3> |
| <p><code>pyfory</code> can serialize any Python object with the following configuration:</p> |
| <ul> |
| <li class=""><strong>For circular references</strong>: Set <code>ref=True</code> to enable reference tracking</li> |
| <li class=""><strong>For functions/classes</strong>: Set <code>strict=False</code> to allow deserialization of dynamic types</li> |
| </ul> |
| <p><strong>⚠️ Security Warning</strong>: When <code>strict=False</code>, Fory will deserialize arbitrary types, which can pose security risks if data comes from untrusted sources. Only use <code>strict=False</code> in controlled environments where you trust the data source completely. If you do need to use <code>strict=False</code>, please configure a <code>DeserializationPolicy</code> when creating fory using <code>policy=your_policy</code> to controlling deserialization behavior.</p> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=common-usage>Common Usage<a href=#common-usage class=hash-link aria-label="Direct link to Common Usage" title="Direct link to Common Usage" translate=no></a></h4> |
| <p>Serialize common Python objects including dicts, lists, and custom classes without any registration:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create Fory instance</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize common Python objects</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>"name"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"age"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>30</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"scores"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>95</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>87</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>92</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize custom objects</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> dataclasses </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> dataclass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Bob"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>25</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Person(name='Bob', age=25)</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=serialize-global-functions>Serialize Global Functions<a href=#serialize-global-functions class=hash-link aria-label="Direct link to Serialize Global Functions" title="Direct link to Serialize Global Functions" translate=no></a></h4> |
| <p>Capture and get functions defined at module level. Fory deserialize and return same function object:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create Fory instance</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize global functions</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>my_global_function</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">my_global_function</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=serialize-local-functionslambdas>Serialize Local Functions/Lambdas<a href=#serialize-local-functionslambdas class=hash-link aria-label="Direct link to Serialize Local Functions/Lambdas" title="Direct link to Serialize Local Functions/Lambdas" translate=no></a></h4> |
| <p>Serialize functions with closures and lambda expressions. Fory captures the closure variables automatically:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create Fory instance</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize local functions with closures</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>my_function</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> local_var </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>local_func</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> x </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> local_var</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> local_func</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">my_function</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize lambdas</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>lambda</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=serialize-global-classesmethods>Serialize Global Classes/Methods<a href=#serialize-global-classesmethods class=hash-link aria-label="Direct link to Serialize Global Classes/Methods" title="Direct link to Serialize Global Classes/Methods" translate=no></a></h4> |
| <p>Serialize class objects, instance methods, class methods, and static methods. All method types are supported:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> dataclasses </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> dataclass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize global class</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>f</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">age </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token decorator annotation punctuation" style=color:#393A34>@classmethod</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>g</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">cls</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token decorator annotation punctuation" style=color:#393A34>@staticmethod</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>h</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Bob"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>25</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Person(name='Bob', age=25)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize global class instance method</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Bob"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>20</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 200</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize global class class method</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">g</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize global class static method</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">h</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=serialize-local-classesmethods>Serialize Local Classes/Methods<a href=#serialize-local-classesmethods class=hash-link aria-label="Direct link to Serialize Local Classes/Methods" title="Direct link to Serialize Local Classes/Methods" translate=no></a></h4> |
| <p>Serialize classes defined inside functions along with their methods. Useful for dynamic class creation:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> dataclasses </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> dataclass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>create_local_class</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">LocalClass</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>f</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token decorator annotation punctuation" style=color:#393A34>@classmethod</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>g</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">cls</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token decorator annotation punctuation" style=color:#393A34>@staticmethod</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>h</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">x</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> x</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> LocalClass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize local class</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">create_local_class</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize local class instance method</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">create_local_class</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize local class method</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">create_local_class</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">g</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># serialize local class static method</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">create_local_class</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">h</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># 100</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=out-of-band-buffer-serialization>Out-of-Band Buffer Serialization<a href=#out-of-band-buffer-serialization class=hash-link aria-label="Direct link to Out-of-Band Buffer Serialization" title="Direct link to Out-of-Band Buffer Serialization" translate=no></a></h3> |
| <p>Fory supports pickle5-compatible out-of-band buffer serialization for efficient zero-copy handling of large data structures. This is particularly useful for NumPy arrays, Pandas DataFrames, and other objects with large memory footprints.</p> |
| <p>Out-of-band serialization separates metadata from the actual data buffers, allowing for:</p> |
| <ul> |
| <li class=""><strong>Zero-copy transfers</strong> when sending data over networks or IPC using <code>memoryview</code></li> |
| <li class=""><strong>Improved performance</strong> for large datasets</li> |
| <li class=""><strong>Pickle5 compatibility</strong> using <code>pickle.PickleBuffer</code></li> |
| <li class=""><strong>Flexible stream support</strong> - write to any writable object (files, BytesIO, sockets, etc.)</li> |
| </ul> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=basic-out-of-band-serialization>Basic Out-of-Band Serialization<a href=#basic-out-of-band-serialization class=hash-link aria-label="Direct link to Basic Out-of-Band Serialization" title="Direct link to Basic Out-of-Band Serialization" translate=no></a></h4> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> numpy </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> np</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Large numpy array</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">array </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">arange</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10000</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> dtype</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">float64</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Serialize with out-of-band buffers</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffer_objects </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">serialized_data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">array</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffer_callback</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffer_objects</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">append</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Convert buffer objects to memoryview for zero-copy transmission</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># For contiguous buffers (bytes, numpy arrays), this is zero-copy</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># For non-contiguous data, a copy may be created to ensure contiguity</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffers </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getbuffer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> obj </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> buffer_objects</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Deserialize with out-of-band buffers (accepts memoryview, bytes, or Buffer)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">deserialized_array </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">serialized_data</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffers</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffers</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">array_equal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">array</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> deserialized_array</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=out-of-band-with-pandas-dataframes>Out-of-Band with Pandas DataFrames<a href=#out-of-band-with-pandas-dataframes class=hash-link aria-label="Direct link to Out-of-Band with Pandas DataFrames" title="Direct link to Out-of-Band with Pandas DataFrames" translate=no></a></h4> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pandas </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> pd</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> numpy </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> np</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create a DataFrame with numeric columns</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">df </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pd</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">DataFrame</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'a'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">arange</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1000</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> dtype</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">float64</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'b'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">arange</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1000</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> dtype</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">int64</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'c'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'text'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1000</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Serialize with out-of-band buffers</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffer_objects </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">serialized_data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">df</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffer_callback</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffer_objects</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">append</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffers </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getbuffer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> obj </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> buffer_objects</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Deserialize</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">deserialized_df </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">serialized_data</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffers</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffers</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> df</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">equals</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">deserialized_df</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=selective-out-of-band-serialization>Selective Out-of-Band Serialization<a href=#selective-out-of-band-serialization class=hash-link aria-label="Direct link to Selective Out-of-Band Serialization" title="Direct link to Selective Out-of-Band Serialization" translate=no></a></h4> |
| <p>You can control which buffers go out-of-band by providing a callback that returns <code>True</code> to keep data in-band or <code>False</code> (and appending to a list) to send it out-of-band:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> numpy </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> np</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">arr1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">arange</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1000</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> dtype</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">float64</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">arr2 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">arange</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2000</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> dtype</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">float64</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">arr1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> arr2</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffer_objects </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">counter </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>selective_callback</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">buffer_object</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>global</span><span class="token plain"> counter</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> counter </span><span class="token operator" style=color:#393A34>+=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Only send even-numbered buffers out-of-band</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> counter </span><span class="token operator" style=color:#393A34>%</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>==</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> buffer_objects</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">append</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">buffer_object</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Out-of-band</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>True</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># In-band</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">serialized </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffer_callback</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">selective_callback</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffers </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getbuffer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> obj </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> buffer_objects</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">deserialized </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">serialized</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffers</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffers</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=pickle5-compatibility>Pickle5 Compatibility<a href=#pickle5-compatibility class=hash-link aria-label="Direct link to Pickle5 Compatibility" title="Direct link to Pickle5 Compatibility" translate=no></a></h4> |
| <p>Fory's out-of-band serialization is fully compatible with pickle protocol 5. When objects implement <code>__reduce_ex__(protocol)</code>, Fory automatically uses protocol 5 to enable <code>pickle.PickleBuffer</code> support:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pickle</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># PickleBuffer objects are automatically supported</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>b"Large binary data"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pickle_buffer </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pickle</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">PickleBuffer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Serialize with buffer callback for out-of-band handling</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffer_objects </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">serialized </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">pickle_buffer</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffer_callback</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffer_objects</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">append</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffers </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getbuffer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> obj </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> buffer_objects</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Deserialize with buffers</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">deserialized </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">serialized</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffers</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffers</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> </span><span class="token builtin">bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">deserialized</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">raw</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>==</span><span class="token plain"> data</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=writing-buffers-to-different-streams>Writing Buffers to Different Streams<a href=#writing-buffers-to-different-streams class=hash-link aria-label="Direct link to Writing Buffers to Different Streams" title="Direct link to Writing Buffers to Different Streams" translate=no></a></h4> |
| <p>The <code>BufferObject.write_to()</code> method accepts any writable stream object, making it flexible for various use cases:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> numpy </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> np</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> io</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">array </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">arange</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1000</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> dtype</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">float64</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Collect out-of-band buffers</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">buffer_objects </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">serialized </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">array</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> buffer_callback</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">buffer_objects</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">append</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Write to different stream types</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> buffer_obj </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> buffer_objects</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Write to BytesIO (in-memory stream)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> bytes_stream </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> io</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">BytesIO</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> buffer_obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">write_to</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bytes_stream</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Write to file</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>with</span><span class="token plain"> </span><span class="token builtin">open</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>'/tmp/buffer_data.bin'</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'wb'</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> buffer_obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">write_to</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Get zero-copy memoryview (for contiguous buffers)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> mv </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> buffer_obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getbuffer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> </span><span class="token builtin">isinstance</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">mv</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">memoryview</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p><strong>Note</strong>: For contiguous memory buffers (like bytes, numpy arrays), <code>getbuffer()</code> returns a zero-copy <code>memoryview</code>. For non-contiguous data, a copy may be created to ensure contiguity.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=️-cross-language-object-graph-serialization>🏃♂️ Cross-Language Object Graph Serialization<a href=#️-cross-language-object-graph-serialization class=hash-link aria-label="Direct link to 🏃♂️ Cross-Language Object Graph Serialization" title="Direct link to 🏃♂️ Cross-Language Object Graph Serialization" translate=no></a></h2> |
| <p><code>pyfory</code> supports cross-language object graph serialization, allowing you to serialize data in Python and deserialize it in Java, Go, Rust, or other supported languages.</p> |
| <p>The binary protocol and API are similar to <code>pyfory</code>'s python-native mode, but Python-native mode can serialize any Python object—including global functions, local functions, lambdas, local classes, and types with customized serialization using <code>__getstate__/__reduce__/__reduce_ex__</code>, which are not allowed in xlang mode.</p> |
| <p>To use xlang mode, create <code>Fory</code> with <code>xlang=True</code>. This mode is for xlang serialization applications:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=cross-language-serialization>Cross-Language Serialization<a href=#cross-language-serialization class=hash-link aria-label="Direct link to Cross-Language Serialization" title="Direct link to Cross-Language Serialization" translate=no></a></h3> |
| <p>Serialize data in Python and deserialize it in Java, Go, Rust, or other supported languages. Both sides must register the same type with matching names:</p> |
| <p><strong>Python (Serializer)</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Cross-language mode for interoperability</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Register type for cross-language compatibility</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">int32</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"example.Person"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Charlie"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>35</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">binary_data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># binary_data can now be sent to Java, Go, etc.</span><br/></div></code></pre></div></div> |
| <p><strong>Java (Deserializer)</strong></p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> </span><span class="token import namespace" style=opacity:0.7>org</span><span class="token import namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token import namespace" style=opacity:0.7>apache</span><span class="token import namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token import namespace" style=opacity:0.7>fory</span><span class="token import namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token import operator" style=color:#393A34>*</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Fory</span><span class="token plain"> fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>builder</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>withLanguage</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Language</span><span class="token punctuation" style=color:#393A34>.</span><span class="token constant" style=color:#36acaa>XLANG</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>withRefTracking</span><span class="token punctuation" style=color:#393A34>(</span><span class="token boolean" style=color:#36acaa>true</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>build</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"example.Person"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Person</span><span class="token plain"> person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">binaryData</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-row-format---zero-copy-processing>📊 Row Format - Zero-Copy Processing<a href=#-row-format---zero-copy-processing class=hash-link aria-label="Direct link to 📊 Row Format - Zero-Copy Processing" title="Direct link to 📊 Row Format - Zero-Copy Processing" translate=no></a></h2> |
| <p>Apache Fury™ provides a random-access row format that enables reading nested fields from binary data without full deserialization. This drastically reduces overhead when working with large objects where only partial data access is needed. The format also supports memory-mapped files for ultra-low memory footprint.</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=basic-row-format-usage>Basic Row Format Usage<a href=#basic-row-format-usage class=hash-link aria-label="Direct link to Basic Row Format Usage" title="Direct link to Basic Row Format Usage" translate=no></a></h3> |
| <p>Encode objects to row format for random access without full deserialization. Ideal for large datasets:</p> |
| <p><strong>Python</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyarrow </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> pa</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> dataclasses </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> dataclass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> typing </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Dict</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Bar</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">pa</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">int64</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Foo</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> pa</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">int32</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">pa</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">int32</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f3</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Dict</span><span class="token punctuation" style=color:#393A34>[</span><span class="token builtin">str</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> pa</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">int32</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f4</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> List</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Bar</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create encoder for row format</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">encoder </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">encoder</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Foo</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create large dataset</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">foo </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Foo</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f1</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f2</span><span class="token operator" style=color:#393A34>=</span><span class="token builtin">list</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1_000_000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f3</span><span class="token operator" style=color:#393A34>=</span><span class="token punctuation" style=color:#393A34>{</span><span class="token string-interpolation string" style=color:#e3116c>f"k</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">i</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> i </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> i </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1_000_000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f4</span><span class="token operator" style=color:#393A34>=</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">Bar</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">f1</span><span class="token operator" style=color:#393A34>=</span><span class="token string-interpolation string" style=color:#e3116c>f"s</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">i</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f2</span><span class="token operator" style=color:#393A34>=</span><span class="token builtin">list</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> i </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1_000_000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Encode to row format</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">binary</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bytes</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> encoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">to_row</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">to_bytes</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Zero-copy access - no full deserialization needed!</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">foo_row </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">RowData</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">encoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">schema</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> binary</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">foo_row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2</span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>100000</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Access 100,000th element directly</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">foo_row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f4</span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>100000</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Access nested field directly</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">foo_row</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f4</span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>200000</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2</span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>5</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Access deeply nested field directly</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=cross-language-compatibility>Cross-Language Compatibility<a href=#cross-language-compatibility class=hash-link aria-label="Direct link to Cross-Language Compatibility" title="Direct link to Cross-Language Compatibility" translate=no></a></h3> |
| <p>Row format works across languages. Here's the same data structure accessed in Java:</p> |
| <p><strong>Java</strong></p> |
| <div class="language-java codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-java codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Bar</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">List</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Long</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Foo</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">List</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Integer</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Map</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">String</span><span class="token generics punctuation" style=color:#393A34>,</span><span class="token generics"> </span><span class="token generics class-name">Integer</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> f3</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">List</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Bar</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> f4</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">RowEncoder</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Foo</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> encoder </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Encoders</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>bean</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Create large dataset</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Foo</span><span class="token plain"> foo </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">Foo</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">IntStream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1_000_000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>boxed</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>collect</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Collectors</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>toList</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f3 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">IntStream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1_000_000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>boxed</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>collect</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Collectors</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>toMap</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">i </span><span class="token operator" style=color:#393A34>-></span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"k"</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> i</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> i </span><span class="token operator" style=color:#393A34>-></span><span class="token plain"> i</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">List</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Bar</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> bars </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">ArrayList</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1_000_000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> i </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> i </span><span class="token operator" style=color:#393A34><</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1_000_000</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> i</span><span class="token operator" style=color:#393A34>++</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token class-name">Bar</span><span class="token plain"> bar </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>new</span><span class="token plain"> </span><span class="token class-name">Bar</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> bar</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"s"</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> i</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> bar</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">LongStream</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>boxed</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>collect</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Collectors</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>toList</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> bars</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>add</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bar</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f4 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> bars</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Encode to row format (cross-language compatible with Python)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">BinaryRow</span><span class="token plain"> binaryRow </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> encoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>toRow</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Zero-copy random access without full deserialization</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">BinaryArray</span><span class="token plain"> f2Array </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> binaryRow</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getArray</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access f2 list</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">BinaryArray</span><span class="token plain"> f4Array </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> binaryRow</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getArray</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>3</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access f4 list</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">BinaryRow</span><span class="token plain"> bar10 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f4Array</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access 11th Bar</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>long</span><span class="token plain"> value </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> bar10</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getArray</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getInt64</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>5</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access 6th element of bar.f2</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Partial deserialization - only deserialize what you need</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">RowEncoder</span><span class="token generics punctuation" style=color:#393A34><</span><span class="token generics class-name">Bar</span><span class="token generics punctuation" style=color:#393A34>></span><span class="token plain"> barEncoder </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Encoders</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>bean</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">Bar</span><span class="token punctuation" style=color:#393A34>.</span><span class="token keyword" style=color:#00009f>class</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Bar</span><span class="token plain"> bar1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> barEncoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>fromRow</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">f4Array</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Deserialize 11th Bar only</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Bar</span><span class="token plain"> bar2 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> barEncoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>fromRow</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">f4Array</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>getStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>20</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Deserialize 21st Bar only</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Full deserialization when needed</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token class-name">Foo</span><span class="token plain"> newFoo </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> encoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>fromRow</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">binaryRow</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><br/></div></code></pre></div></div> |
| <p><strong>C++</strong></p> |
| <p>And in C++ with compile-time type information:</p> |
| <div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token macro property directive-hash" style=color:#36acaa>#</span><span class="token macro property directive keyword" style=color:#00009f>include</span><span class="token macro property" style=color:#36acaa> </span><span class="token macro property string" style=color:#e3116c>"fory/encoder/row_encoder.h"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token macro property directive-hash" style=color:#36acaa>#</span><span class="token macro property directive keyword" style=color:#00009f>include</span><span class="token macro property" style=color:#36acaa> </span><span class="token macro property string" style=color:#e3116c>"fory/row/writer.h"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token class-name">Bar</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">string f1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">vector</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>int64_t</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>FORY_FIELD_INFO</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Bar</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>struct</span><span class="token plain"> </span><span class="token class-name">Foo</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>int32_t</span><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">vector</span><span class="token operator" style=color:#393A34><</span><span class="token keyword" style=color:#00009f>int32_t</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">map</span><span class="token operator" style=color:#393A34><</span><span class="token plain">std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">string</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>int32_t</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> f3</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">vector</span><span class="token operator" style=color:#393A34><</span><span class="token plain">Bar</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> f4</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>FORY_FIELD_INFO</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Foo</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f3</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f4</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Create large dataset</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Foo foo</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> i </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> i </span><span class="token operator" style=color:#393A34><</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1000000</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> i</span><span class="token operator" style=color:#393A34>++</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>push_back</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">i</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f3</span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>"k"</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>to_string</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">i</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> i</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> i </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> i </span><span class="token operator" style=color:#393A34><</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1000000</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> i</span><span class="token operator" style=color:#393A34>++</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> Bar bar</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> bar</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"s"</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token function" style=color:#d73a49>to_string</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">i</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>int</span><span class="token plain"> j </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> j </span><span class="token operator" style=color:#393A34><</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> j</span><span class="token operator" style=color:#393A34>++</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> bar</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>push_back</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">j</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> foo</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f4</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>push_back</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">bar</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Encode to row format (cross-language compatible with Python/Java)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">encoder</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">RowEncoder</span><span class="token operator" style=color:#393A34><</span><span class="token plain">Foo</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> encoder</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">encoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>Encode</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">foo</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>auto</span><span class="token plain"> row </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> encoder</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>GetWriter</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token function" style=color:#d73a49>ToRow</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic>// Zero-copy random access without full deserialization</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>auto</span><span class="token plain"> f2_array </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> row</span><span class="token operator" style=color:#393A34>-></span><span class="token function" style=color:#d73a49>GetArray</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access f2 list</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>auto</span><span class="token plain"> f4_array </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> row</span><span class="token operator" style=color:#393A34>-></span><span class="token function" style=color:#d73a49>GetArray</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>3</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access f4 list</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>auto</span><span class="token plain"> bar10 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f4_array</span><span class="token operator" style=color:#393A34>-></span><span class="token function" style=color:#d73a49>GetStruct</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access 11th Bar</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>int64_t</span><span class="token plain"> value </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> bar10</span><span class="token operator" style=color:#393A34>-></span><span class="token function" style=color:#d73a49>GetArray</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token operator" style=color:#393A34>-></span><span class="token function" style=color:#d73a49>GetInt64</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>5</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access 6th element of bar.f2</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">std</span><span class="token double-colon punctuation" style=color:#393A34>::</span><span class="token plain">string str </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> bar10</span><span class="token operator" style=color:#393A34>-></span><span class="token function" style=color:#d73a49>GetString</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic>// Access bar.f1</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=key-benefits>Key Benefits<a href=#key-benefits class=hash-link aria-label="Direct link to Key Benefits" title="Direct link to Key Benefits" translate=no></a></h3> |
| <ul> |
| <li class=""><strong>Zero-Copy Access</strong>: Read nested fields without deserializing the entire object</li> |
| <li class=""><strong>Memory Efficiency</strong>: Memory-map large datasets directly from disk</li> |
| <li class=""><strong>Cross-Language</strong>: Binary format is compatible between Python, Java, and other Fury implementations</li> |
| <li class=""><strong>Partial Deserialization</strong>: Deserialize only the specific elements you need</li> |
| <li class=""><strong>High Performance</strong>: Skip unnecessary data parsing for analytics and big data workloads</li> |
| </ul> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=️-core-api-reference>🏗️ Core API Reference<a href=#️-core-api-reference class=hash-link aria-label="Direct link to 🏗️ Core API Reference" title="Direct link to 🏗️ Core API Reference" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=fory-class>Fory Class<a href=#fory-class class=hash-link aria-label="Direct link to Fory Class" title="Direct link to Fory Class" translate=no></a></h3> |
| <p>The main serialization interface:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Fory</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> xlang</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ref</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> strict</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> compatible</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> max_depth</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>50</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=threadsafefory-class>ThreadSafeFory Class<a href=#threadsafefory-class class=hash-link aria-label="Direct link to ThreadSafeFory Class" title="Direct link to ThreadSafeFory Class" translate=no></a></h3> |
| <p>Thread-safe serialization interface using thread-local storage:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">ThreadSafeFory</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> xlang</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ref</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> strict</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> compatible</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bool</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> max_depth</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>50</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p><code>ThreadSafeFory</code> provides thread-safe serialization by maintaining a pool of <code>Fory</code> instances protected by a lock. When a thread needs to serialize/deserialize, it gets an instance from the pool, uses it, and returns it. All type registrations must be done before any serialization to ensure consistency across all instances.</p> |
| <p><strong>Thread Safety Example:</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> threading</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> dataclasses </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> dataclass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Person</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create thread-safe Fory instance</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ThreadSafeFory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Use in multiple threads safely</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>serialize_in_thread</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">thread_id</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> person </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Person</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">name</span><span class="token operator" style=color:#393A34>=</span><span class="token string-interpolation string" style=color:#e3116c>f"User</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">thread_id</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> age</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>25</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> thread_id</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">person</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Thread </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">thread_id</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">result</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">threads </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">threading</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Thread</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">target</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">serialize_in_thread</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> args</span><span class="token operator" style=color:#393A34>=</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">i</span><span class="token punctuation" style=color:#393A34>,</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> i </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> t </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> threads</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> t</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">start</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> t </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> threads</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> t</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">join</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <p><strong>Key Features:</strong></p> |
| <ul> |
| <li class=""><strong>Instance Pool</strong>: Maintains a pool of <code>Fory</code> instances protected by a lock for thread safety</li> |
| <li class=""><strong>Shared Configuration</strong>: All registrations must be done upfront and are applied to all instances</li> |
| <li class=""><strong>Same API</strong>: Drop-in replacement for <code>Fory</code> class with identical methods</li> |
| <li class=""><strong>Registration Safety</strong>: Prevents registration after first use to ensure consistency</li> |
| </ul> |
| <p><strong>When to Use:</strong></p> |
| <ul> |
| <li class=""><strong>Multi-threaded Applications</strong>: Web servers, concurrent workers, parallel processing</li> |
| <li class=""><strong>Shared Fory Instances</strong>: When multiple threads need to serialize/deserialize data</li> |
| <li class=""><strong>Thread Pools</strong>: Applications using thread pools or concurrent.futures</li> |
| </ul> |
| <p><strong>Parameters:</strong></p> |
| <ul> |
| <li class=""><strong><code>xlang</code></strong> (<code>bool</code>, default=<code>False</code>): Enable cross-language serialization. When <code>False</code>, enables Python-native mode supporting all Python objects. When <code>True</code>, enables cross-language mode compatible with Java, Go, Rust, etc.</li> |
| <li class=""><strong><code>ref</code></strong> (<code>bool</code>, default=<code>False</code>): Enable reference tracking for shared/circular references. Disable for better performance if your data has no shared references.</li> |
| <li class=""><strong><code>strict</code></strong> (<code>bool</code>, default=<code>True</code>): Require type registration for security. <strong>Highly recommended</strong> for production. Only disable in trusted environments.</li> |
| <li class=""><strong><code>compatible</code></strong> (<code>bool</code>, default=<code>False</code>): Enable schema evolution in cross-language mode, allowing fields to be added/removed while maintaining compatibility.</li> |
| <li class=""><strong><code>max_depth</code></strong> (<code>int</code>, default=<code>50</code>): Maximum deserialization depth for security, preventing stack overflow attacks.</li> |
| </ul> |
| <p><strong>Key Methods:</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Serialization (serialize/deserialize are identical to dumps/loads)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bytes</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">obj </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Alternative API (aliases)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">bytes</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">obj </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Type registration by id (for Python mode)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>123</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>123</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">custom_serializer</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Type registration by name (for cross-language mode)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"my.package.MyClass"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"my.package.MyClass"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">custom_serializer</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=language-modes-comparison>Language Modes Comparison<a href=#language-modes-comparison class=hash-link aria-label="Direct link to Language Modes Comparison" title="Direct link to Language Modes Comparison" translate=no></a></h3> |
| <table><thead><tr><th>Feature<th>Python Mode (<code>xlang=False</code>)<th>Cross-Language Mode (<code>xlang=True</code>)<tbody><tr><td><strong>Use Case</strong><td>Pure Python applications<td>Multi-language systems<tr><td><strong>Compatibility</strong><td>Python only<td>Java, Go, Rust, C++, JavaScript, etc.<tr><td><strong>Supported Types</strong><td>All Python types<td>Cross-language compatible types only<tr><td><strong>Functions/Lambdas</strong><td>✓ Supported<td>✗ Not allowed<tr><td><strong>Local Classes</strong><td>✓ Supported<td>✗ Not allowed<tr><td><strong>Dynamic Classes</strong><td>✓ Supported<td>✗ Not allowed<tr><td><strong>Schema Evolution</strong><td>✓ Supported (with <code>compatible=True</code>)<td>✓ Supported (with <code>compatible=True</code>)<tr><td><strong>Performance</strong><td>Extremely fast<td>Very fast<tr><td><strong>Data Size</strong><td>Compact<td>Compact with type metadata</table> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=python-mode-xlangfalse>Python Mode (<code>xlang=False</code>)<a href=#python-mode-xlangfalse class=hash-link aria-label="Direct link to python-mode-xlangfalse" title="Direct link to python-mode-xlangfalse" translate=no></a></h4> |
| <p>Python mode supports all Python types including functions, classes, and closures. Perfect for pure Python applications:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Full Python compatibility mode</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Supports ALL Python objects:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'function'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>lambda</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> x </span><span class="token operator" style=color:#393A34>*</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Functions and lambdas</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'class'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>'Dynamic'</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Dynamic classes</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'method'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">upper</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Methods</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'nested'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>'circular_ref'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>None</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Circular references (when ref=True)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Drop-in replacement for pickle/cloudpickle</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pickle</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">obj </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>"nested"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>3</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>4</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>==</span><span class="token plain"> pickle</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">pickle</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Significantly faster and more compact than pickle</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> timeit</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">obj </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token string-interpolation string" style=color:#e3116c>f"key</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">i</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string-interpolation string" style=color:#e3116c>f"value</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">i</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> i </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Fory: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">timeit</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>.</span><span class="token string-interpolation interpolation">timeit</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>(</span><span class="token string-interpolation interpolation keyword" style=color:#00009f>lambda</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>:</span><span class="token string-interpolation interpolation"> fory</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>.</span><span class="token string-interpolation interpolation">dumps</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>(</span><span class="token string-interpolation interpolation">obj</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>)</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>,</span><span class="token string-interpolation interpolation"> number</span><span class="token string-interpolation interpolation operator" style=color:#393A34>=</span><span class="token string-interpolation interpolation number" style=color:#36acaa>1000</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>)</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>:</span><span class="token string-interpolation interpolation format-spec">.3f</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>s"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Pickle: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">timeit</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>.</span><span class="token string-interpolation interpolation">timeit</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>(</span><span class="token string-interpolation interpolation keyword" style=color:#00009f>lambda</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>:</span><span class="token string-interpolation interpolation"> pickle</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>.</span><span class="token string-interpolation interpolation">dumps</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>(</span><span class="token string-interpolation interpolation">obj</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>)</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>,</span><span class="token string-interpolation interpolation"> number</span><span class="token string-interpolation interpolation operator" style=color:#393A34>=</span><span class="token string-interpolation interpolation number" style=color:#36acaa>1000</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>)</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>:</span><span class="token string-interpolation interpolation format-spec">.3f</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>s"</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=cross-language-mode-xlangtrue>Cross-Language Mode (<code>xlang=True</code>)<a href=#cross-language-mode-xlangtrue class=hash-link aria-label="Direct link to cross-language-mode-xlangtrue" title="Direct link to cross-language-mode-xlangtrue" translate=no></a></h4> |
| <p>Cross-language mode restricts types to those compatible across all Fory implementations. Use for multi-language systems:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Cross-language compatibility mode</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Only supports cross-language compatible types</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyDataClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"com.example.MyDataClass"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Data can be read by Java, Go, Rust, etc.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyDataClass</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">field1</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"value"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> field2</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>42</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-advanced-features>🔧 Advanced Features<a href=#-advanced-features class=hash-link aria-label="Direct link to 🔧 Advanced Features" title="Direct link to 🔧 Advanced Features" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=reference-tracking--circular-references>Reference Tracking & Circular References<a href=#reference-tracking--circular-references class=hash-link aria-label="Direct link to Reference Tracking & Circular References" title="Direct link to Reference Tracking & Circular References" translate=no></a></h3> |
| <p>Handle shared references and circular dependencies safely. Set <code>ref=True</code> to deduplicate objects:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Enable reference tracking</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Handle circular references safely</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">value </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> value</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">children </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">parent </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>None</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">root </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Node</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"root"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">child </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Node</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"child"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">child</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">parent </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> root </span><span class="token comment" style=color:#999988;font-style:italic># Circular reference</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">root</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">children</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">append</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">child</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Serializes without infinite recursion</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">root</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> result</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">children</span><span class="token punctuation" style=color:#393A34>[</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">parent </span><span class="token keyword" style=color:#00009f>is</span><span class="token plain"> result </span><span class="token comment" style=color:#999988;font-style:italic># Reference preserved</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-registration--security>Type Registration & Security<a href=#type-registration--security class=hash-link aria-label="Direct link to Type Registration & Security" title="Direct link to Type Registration & Security" translate=no></a></h3> |
| <p>In strict mode, only registered types can be deserialized. This prevents arbitrary code execution:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Strict mode (recommended for production)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">SafeClass</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> data</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Must register types in strict mode</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">SafeClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"com.example.SafeClass"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Now serialization works</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">obj </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> SafeClass</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"safe data"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Unregistered types will raise an exception</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">UnsafeClass</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>pass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># This will fail in strict mode</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>try</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">UnsafeClass</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>except</span><span class="token plain"> Exception </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> e</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Security protection activated!"</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=custom-serializers>Custom Serializers<a href=#custom-serializers class=hash-link aria-label="Direct link to Custom Serializers" title="Direct link to Custom Serializers" translate=no></a></h3> |
| <p>Implement custom serialization logic for specialized types. Override <code>write/read</code> for Python mode, <code>xwrite/xread</code> for cross-language:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serializer </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> Serializer</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> dataclasses </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> dataclass</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Foo</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f1</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">FooSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Serializer</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> cls</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">super</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> cls</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>write</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> obj</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Foo</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Custom serialization logic</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">write_varint32</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">write_string</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>read</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Custom deserialization logic</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">read_varint32</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> f2 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">read_string</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> Foo</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">f1</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> f2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># For cross-language mode</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>xwrite</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> obj</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> Foo</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">write_int32</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">write_string</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">f2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>xread</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> Foo</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">read_int32</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">buffer</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">read_string</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Foo</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">FooSerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Foo</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Now Foo uses your custom serializer</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Foo</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>42</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"hello"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">result</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Foo(f1=42, f2='hello')</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=numpy--scientific-computing>Numpy & Scientific Computing<a href=#numpy--scientific-computing class=hash-link aria-label="Direct link to Numpy & Scientific Computing" title="Direct link to Numpy & Scientific Computing" translate=no></a></h3> |
| <p>Fory natively supports numpy arrays with optimized serialization. Large arrays use zero-copy when possible:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> numpy </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> np</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Numpy arrays are supported natively</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">arrays </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'matrix'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">random</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">rand</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1000</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'vector'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">arange</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>10000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>'bool_mask'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">random</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">choice</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>[</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> size</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>5000</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">arrays</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Zero-copy for compatible array types</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> np</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">array_equal</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">arrays</span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'matrix'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> result</span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'matrix'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-best-practices>💡 Best Practices<a href=#-best-practices class=hash-link aria-label="Direct link to 💡 Best Practices" title="Direct link to 💡 Best Practices" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=production-configuration>Production Configuration<a href=#production-configuration class=hash-link aria-label="Direct link to Production Configuration" title="Direct link to Production Configuration" translate=no></a></h3> |
| <p>Use these recommended settings to balance security, performance, and functionality in production:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Recommended settings for production</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Use True if you need cross-language support</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Enable if you have shared/circular references</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># CRITICAL: Always True in production</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> compatible</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Enable only if you need schema evolution</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> max_depth</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>20</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Adjust based on your data structure depth</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Register all types upfront</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">UserModel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">OrderModel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">ProductModel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>102</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=performance-tips>Performance Tips<a href=#performance-tips class=hash-link aria-label="Direct link to Performance Tips" title="Direct link to Performance Tips" translate=no></a></h3> |
| <p>Optimize serialization speed and memory usage with these guidelines:</p> |
| <ol> |
| <li class=""><strong>Disable <code>ref=True</code> if not needed</strong>: Reference tracking has overhead</li> |
| <li class=""><strong>Use type_id instead of typename</strong>: Integer IDs are faster than string names</li> |
| <li class=""><strong>Reuse Fory instances</strong>: Create once, use many times</li> |
| <li class=""><strong>Enable Cython</strong>: Make sure <code>ENABLE_FORY_CYTHON_SERIALIZATION=1</code>, should be enabled by default</li> |
| <li class=""><strong>Use row format for large arrays</strong>: Zero-copy access for analytics</li> |
| </ol> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Good: Reuse instance</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> obj </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> objects</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Bad: Create new instance each time</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> obj </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> objects</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Wasteful!</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=type-registration-patterns>Type Registration Patterns<a href=#type-registration-patterns class=hash-link aria-label="Direct link to Type Registration Patterns" title="Direct link to Type Registration Patterns" translate=no></a></h3> |
| <p>Choose the right registration approach for your use case:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Pattern 1: Simple registration</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Pattern 2: Cross-language with typename</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"com.example.MyClass"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Pattern 3: With custom serializer</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> serializer</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">MySerializer</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">fory</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> MyClass</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Pattern 4: Batch registration</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">type_id </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>100</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> model_class </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">User</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Order</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Product</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> Invoice</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">model_class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">type_id</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> type_id </span><span class="token operator" style=color:#393A34>+=</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>1</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=error-handling>Error Handling<a href=#error-handling class=hash-link aria-label="Direct link to Error Handling" title="Direct link to Error Handling" translate=no></a></h3> |
| <p>Handle common serialization errors gracefully. Catch specific exceptions for better error recovery:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">error </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> TypeUnregisteredError</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> TypeNotCompatibleError</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>try</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">my_object</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>except</span><span class="token plain"> TypeUnregisteredError </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> e</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Type not registered: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">e</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Register the type and retry</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token builtin">type</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">my_object</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">my_object</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>except</span><span class="token plain"> Exception </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> e</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Serialization failed: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">e</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>try</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> obj </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>except</span><span class="token plain"> TypeNotCompatibleError </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> e</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Schema mismatch: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">e</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Handle version mismatch</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>except</span><span class="token plain"> Exception </span><span class="token keyword" style=color:#00009f>as</span><span class="token plain"> e</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Deserialization failed: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">e</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=️-migration-guide>🛠️ Migration Guide<a href=#️-migration-guide class=hash-link aria-label="Direct link to 🛠️ Migration Guide" title="Direct link to 🛠️ Migration Guide" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=from-pickle>From Pickle<a href=#from-pickle class=hash-link aria-label="Direct link to From Pickle" title="Direct link to From Pickle" translate=no></a></h3> |
| <p>Replace pickle with Fory for better performance while keeping the same API:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Before (pickle)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pickle</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pickle</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pickle</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># After (Fory - drop-in replacement with better performance)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">obj</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Faster and more compact</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Faster deserialization</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Benefits:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># - 2-10x faster serialization</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># - 2-5x faster deserialization</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># - Up to 3x smaller data size</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># - Same API, better performance</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=from-json>From JSON<a href=#from-json class=hash-link aria-label="Direct link to From JSON" title="Direct link to From JSON" translate=no></a></h3> |
| <p>Unlike JSON, Fory supports arbitrary Python types including functions:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Before (JSON - limited types)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> json</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> json</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>"name"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"age"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>30</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> json</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># After (Fory - all Python types)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>"name"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"age"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>30</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"func"</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>lambda</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> x</span><span class="token punctuation" style=color:#393A34>}</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-security-best-practices>🚨 Security Best Practices<a href=#-security-best-practices class=hash-link aria-label="Direct link to 🚨 Security Best Practices" title="Direct link to 🚨 Security Best Practices" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=production-configuration-1>Production Configuration<a href=#production-configuration-1 class=hash-link aria-label="Direct link to Production Configuration" title="Direct link to Production Configuration" translate=no></a></h3> |
| <p>Never disable <code>strict=True</code> in production unless your environment is completely trusted:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Recommended production settings</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># or True for cross-language</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Handle circular references</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># IMPORTANT: Prevent malicious data</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> max_depth</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Prevent deep recursion attacks</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Explicitly register allowed types</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">UserModel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">OrderModel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Never set strict=False in production with untrusted data!</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=development-vs-production>Development vs Production<a href=#development-vs-production class=hash-link aria-label="Direct link to Development vs Production" title="Direct link to Development vs Production" translate=no></a></h3> |
| <p>Use environment variables to switch between development and production configurations:</p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> os</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Development configuration</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> os</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">getenv</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>'ENV'</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>==</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'development'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Allow any type for development</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> max_depth</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>1000</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Higher limit for development</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>else</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Production configuration (security hardened)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># CRITICAL: Require registration</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> max_depth</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Reasonable limit</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Register only known safe types</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>for</span><span class="token plain"> idx</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> model_class </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> </span><span class="token builtin">enumerate</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">UserModel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ProductModel</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> OrderModel</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">model_class</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>+</span><span class="token plain"> idx</span><span class="token punctuation" style=color:#393A34>)</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=deserializationpolicy>DeserializationPolicy<a href=#deserializationpolicy class=hash-link aria-label="Direct link to DeserializationPolicy" title="Direct link to DeserializationPolicy" translate=no></a></h3> |
| <p>When <code>strict=False</code> is necessary (e.g., deserializing functions/lambdas), use <code>DeserializationPolicy</code> to implement fine-grained security controls during deserialization. This provides protection similar to <code>pickle.Unpickler.find_class()</code> but with more comprehensive hooks.</p> |
| <p><strong>Why use DeserializationPolicy?</strong></p> |
| <ul> |
| <li class="">Block dangerous classes/modules (e.g., <code>subprocess.Popen</code>)</li> |
| <li class="">Intercept and validate <code>__reduce__</code> callables before invocation</li> |
| <li class="">Sanitize sensitive data during <code>__setstate__</code></li> |
| <li class="">Replace or reject deserialized objects based on custom rules</li> |
| </ul> |
| <p><strong>Example: Blocking Dangerous Classes</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>from</span><span class="token plain"> pyfory </span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> DeserializationPolicy</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">dangerous_modules </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token string" style=color:#e3116c>'subprocess'</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'os'</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'__builtin__'</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">SafeDeserializationPolicy</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">DeserializationPolicy</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token triple-quoted-string string" style=color:#e3116c>"""Block potentially dangerous classes during deserialization."""</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>validate_class</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> cls</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> is_local</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>**</span><span class="token plain">kwargs</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Block dangerous modules</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> cls</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">__module__ </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> dangerous_modules</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>raise</span><span class="token plain"> ValueError</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string-interpolation string" style=color:#e3116c>f"Blocked dangerous class: </span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">cls</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>.</span><span class="token string-interpolation interpolation">__module__</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>.</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>{</span><span class="token string-interpolation interpolation">cls</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>.</span><span class="token string-interpolation interpolation">__name__</span><span class="token string-interpolation interpolation punctuation" style=color:#393A34>}</span><span class="token string-interpolation string" style=color:#e3116c>"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>None</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>intercept_reduce_call</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> callable_obj</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> args</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>**</span><span class="token plain">kwargs</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Block specific callable invocations during __reduce__</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> </span><span class="token builtin">getattr</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">callable_obj</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'__name__'</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>""</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>==</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'Popen'</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>raise</span><span class="token plain"> ValueError</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Blocked attempt to invoke subprocess.Popen"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>None</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>intercept_setstate</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> obj</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> state</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>**</span><span class="token plain">kwargs</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Sanitize sensitive data</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>if</span><span class="token plain"> </span><span class="token builtin">isinstance</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">state</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token builtin">dict</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>and</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'password'</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> state</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> state</span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'password'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'***REDACTED***'</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>return</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>None</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Create Fory with custom security policy</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">policy </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> SafeDeserializationPolicy</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">fory </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> policy</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">policy</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Now deserialization is protected by your custom policy</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">serialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">my_object</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> fory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">deserialize</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Policy hooks will be invoked</span><br/></div></code></pre></div></div> |
| <p><strong>Available Policy Hooks:</strong></p> |
| <ul> |
| <li class=""><code>validate_class(cls, is_local)</code> - Validate/block class types during deserialization</li> |
| <li class=""><code>validate_module(module, is_local)</code> - Validate/block module imports</li> |
| <li class=""><code>validate_function(func, is_local)</code> - Validate/block function references</li> |
| <li class=""><code>intercept_reduce_call(callable_obj, args)</code> - Intercept <code>__reduce__</code> invocations</li> |
| <li class=""><code>inspect_reduced_object(obj)</code> - Inspect/replace objects created via <code>__reduce__</code></li> |
| <li class=""><code>intercept_setstate(obj, state)</code> - Sanitize state before <code>__setstate__</code></li> |
| <li class=""><code>authorize_instantiation(cls, args, kwargs)</code> - Control class instantiation</li> |
| </ul> |
| <p><strong>See also:</strong> <code>pyfory/policy.py</code> contains detailed documentation and examples for each hook.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-troubleshooting>🐛 Troubleshooting<a href=#-troubleshooting class=hash-link aria-label="Direct link to 🐛 Troubleshooting" title="Direct link to 🐛 Troubleshooting" translate=no></a></h2> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=common-issues>Common Issues<a href=#common-issues class=hash-link aria-label="Direct link to Common Issues" title="Direct link to Common Issues" translate=no></a></h3> |
| <p><strong>Q: ImportError with format features</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># A: Install Row format support</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pip install pyfory</span><span class="token punctuation" style=color:#393A34>[</span><span class="token builtin">format</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Or install from source with format support</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pip install </span><span class="token operator" style=color:#393A34>-</span><span class="token plain">e </span><span class="token string" style=color:#e3116c>".[format]"</span><br/></div></code></pre></div></div> |
| <p><strong>Q: Slow serialization performance</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># A: Check if Cython acceleration is enabled</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">ENABLE_FORY_CYTHON_SERIALIZATION</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Should be True</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># If False, Cython extension may not be compiled correctly</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Reinstall with: pip install --force-reinstall --no-cache-dir pyfory</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># For debugging, you can disable Cython mode before importing</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> os</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">os</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">environ</span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'ENABLE_FORY_CYTHON_SERIALIZATION'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'0'</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory </span><span class="token comment" style=color:#999988;font-style:italic># Now uses pure Python mode</span><br/></div></code></pre></div></div> |
| <p><strong>Q: Cross-language compatibility issues</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># A: Use explicit type registration with consistent naming</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"com.package.MyClass"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Use same name in all languages</span><br/></div></code></pre></div></div> |
| <p><strong>Q: Circular reference errors or duplicate data</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># A: Enable reference tracking</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">ref</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Required for circular references</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Example with circular reference</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>def</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>__init__</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">self</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">value </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> value</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> self</span><span class="token punctuation" style=color:#393A34>.</span><span class="token builtin">next</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token boolean" style=color:#36acaa>None</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">node1 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Node</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">node2 </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> Node</span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">node1</span><span class="token punctuation" style=color:#393A34>.</span><span class="token builtin">next</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> node2</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">node2</span><span class="token punctuation" style=color:#393A34>.</span><span class="token builtin">next</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> node1 </span><span class="token comment" style=color:#999988;font-style:italic># Circular reference</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">node1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">result </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>assert</span><span class="token plain"> result</span><span class="token punctuation" style=color:#393A34>.</span><span class="token builtin">next</span><span class="token punctuation" style=color:#393A34>.</span><span class="token builtin">next</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>is</span><span class="token plain"> result </span><span class="token comment" style=color:#999988;font-style:italic># Circular reference preserved</span><br/></div></code></pre></div></div> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=debug-mode>Debug Mode<a href=#debug-mode class=hash-link aria-label="Direct link to Debug Mode" title="Direct link to Debug Mode" translate=no></a></h3> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># Set environment variable BEFORE importing pyfory to disable Cython for debugging</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> os</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">os</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">environ</span><span class="token punctuation" style=color:#393A34>[</span><span class="token string" style=color:#e3116c>'ENABLE_FORY_CYTHON_SERIALIZATION'</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>'0'</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>import</span><span class="token plain"> pyfory </span><span class="token comment" style=color:#999988;font-style:italic># Now uses pure Python implementation</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># This is useful for:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># 1. Debugging protocol issues</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># 2. Understanding serialization behavior</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># 3. Development without recompiling Cython</span><br/></div></code></pre></div></div> |
| <p><strong>Q: Schema evolution not working</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># A: Enable compatible mode for schema evolution</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">xlang</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> compatible</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Version 1: Original class</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">User</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">User</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> typename</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"User"</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">data </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">dumps</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">User</span><span class="token punctuation" style=color:#393A34>(</span><span class="token string" style=color:#e3116c>"Alice"</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>30</span><span class="token punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Version 2: Add new field (backward compatible)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token decorator annotation punctuation" style=color:#393A34>@dataclass</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">User</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> name</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> age</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> email</span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token builtin">str</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"unknown@example.com"</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># New field with default</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Can still deserialize old data</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">user </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">loads</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">data</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>print</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">user</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">email</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># "unknown@example.com"</span><br/></div></code></pre></div></div> |
| <p><strong>Q: Type registration errors in strict mode</strong></p> |
| <div class="language-python codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-python codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># A: Register all custom types before serialization</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>True</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Must register before use</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">MyClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>100</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">register</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">AnotherClass</span><span class="token punctuation" style=color:#393A34>,</span><span class="token plain"> type_id</span><span class="token operator" style=color:#393A34>=</span><span class="token number" style=color:#36acaa>101</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Or disable strict mode (NOT recommended for production)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">f </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> pyfory</span><span class="token punctuation" style=color:#393A34>.</span><span class="token plain">Fory</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">strict</span><span class="token operator" style=color:#393A34>=</span><span class="token boolean" style=color:#36acaa>False</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Use only in trusted environments</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-contributing>🤝 Contributing<a href=#-contributing class=hash-link aria-label="Direct link to 🤝 Contributing" title="Direct link to 🤝 Contributing" translate=no></a></h2> |
| <p>Apache Fory™ is an open-source project under the Apache Software Foundation. We welcome all forms of contributions:</p> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=how-to-contribute>How to Contribute<a href=#how-to-contribute class=hash-link aria-label="Direct link to How to Contribute" title="Direct link to How to Contribute" translate=no></a></h3> |
| <ol> |
| <li class=""><strong>Report Issues</strong>: Found a bug? <a href=https://github.com/apache/fory/issues target=_blank rel="noopener noreferrer" class="">Open an issue</a></li> |
| <li class=""><strong>Suggest Features</strong>: Have an idea? Start a discussion</li> |
| <li class=""><strong>Improve Docs</strong>: Documentation improvements are always welcome</li> |
| <li class=""><strong>Submit Code</strong>: See our <a href=https://github.com/apache/fory/blob/main/CONTRIBUTING.md target=_blank rel="noopener noreferrer" class="">Contributing Guide</a></li> |
| </ol> |
| <h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=development-setup>Development Setup<a href=#development-setup class=hash-link aria-label="Direct link to Development Setup" title="Direct link to Development Setup" translate=no></a></h3> |
| <div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> clone https://github.com/apache/fory.git</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> fory/python</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Install dependencies</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pip </span><span class="token function" style=color:#d73a49>install</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-e</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>".[dev,format]"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Run tests</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pytest </span><span class="token parameter variable" style=color:#36acaa>-v</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-s</span><span class="token plain"> </span><span class="token builtin class-name">.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Run specific test</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pytest </span><span class="token parameter variable" style=color:#36acaa>-v</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-s</span><span class="token plain"> pyfory/tests/test_serializer.py</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Format code</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">ruff </span><span class="token function" style=color:#d73a49>format</span><span class="token plain"> </span><span class="token builtin class-name">.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">ruff check </span><span class="token parameter variable" style=color:#36acaa>--fix</span><span class="token plain"> </span><span class="token builtin class-name">.</span><br/></div></code></pre></div></div> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-license>📄 License<a href=#-license class=hash-link aria-label="Direct link to 📄 License" title="Direct link to 📄 License" translate=no></a></h2> |
| <p>Apache License 2.0. See <a href=https://github.com/apache/fory/blob/main/LICENSE target=_blank rel="noopener noreferrer" class="">LICENSE</a> for details.</p> |
| <hr/> |
| <p><strong>Apache Fory™</strong> - Blazing fast, secure, and versatile serialization for modern applications.</p> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-links>🔗 Links<a href=#-links class=hash-link aria-label="Direct link to 🔗 Links" title="Direct link to 🔗 Links" translate=no></a></h2> |
| <ul> |
| <li class=""><strong>Documentation</strong>: <a href=https://fory.apache.org/docs/latest/python_guide/ target=_blank rel="noopener noreferrer" class="">https://fory.apache.org/docs/latest/python_guide/</a></li> |
| <li class=""><strong>GitHub</strong>: <a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fory</a></li> |
| <li class=""><strong>PyPI</strong>: <a href=https://pypi.org/project/pyfory/ target=_blank rel="noopener noreferrer" class="">https://pypi.org/project/pyfory/</a></li> |
| <li class=""><strong>Issues</strong>: <a href=https://github.com/apache/fory/issues target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fory/issues</a></li> |
| <li class=""><strong>Slack</strong>: <a href=https://join.slack.com/t/fory-project/shared_invite/zt-36g0qouzm-kcQSvV_dtfbtBKHRwT5gsw target=_blank rel="noopener noreferrer" class="">https://join.slack.com/t/fory-project/shared_invite/zt-36g0qouzm-kcQSvV_dtfbtBKHRwT5gsw</a></li> |
| <li class=""><strong>Benchmarks</strong>: <a href=https://fory.apache.org/docs/latest/benchmarks/ target=_blank rel="noopener noreferrer" class="">https://fory.apache.org/docs/latest/benchmarks/</a></li> |
| </ul> |
| <h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-community>🌟 Community<a href=#-community class=hash-link aria-label="Direct link to 🌟 Community" title="Direct link to 🌟 Community" translate=no></a></h2> |
| <p>We welcome contributions! Whether it's bug reports, feature requests, documentation improvements, or code contributions, we appreciate your help.</p> |
| <ul> |
| <li class="">Star the project on <a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class="">GitHub</a> ⭐</li> |
| <li class="">Join our <a href=https://join.slack.com/t/fory-project/shared_invite/zt-36g0qouzm-kcQSvV_dtfbtBKHRwT5gsw target=_blank rel="noopener noreferrer" class="">Slack community</a> 💬</li> |
| <li class="">Follow us on <a href=https://x.com/ApacheFory target=_blank rel="noopener noreferrer" class="">X/Twitter</a> 🐦</li> |
| </ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href=https://github.com/apache/fory-site/tree/main/docs/guide/python_guide.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_Z9Sw aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"/></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href=/docs/0.13/guide/serialization><div class=pagination-nav__sublabel>Previous</div><div class=pagination-nav__label>Java Serialization Guide</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/docs/0.13/guide/rust_serialization><div class=pagination-nav__sublabel>Next</div><div class=pagination-nav__label>Rust Serialization</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href=#apache-fory-python class="table-of-contents__link toc-highlight">Apache Fory™ Python</a><li><a href=#-key-features class="table-of-contents__link toc-highlight">🚀 Key Features</a><ul><li><a href=#-flexible-serialization-modes class="table-of-contents__link toc-highlight">🔧 <strong>Flexible Serialization Modes</strong></a><li><a href=#-versatile-serialization-features class="table-of-contents__link toc-highlight">🎯 Versatile Serialization Features</a><li><a href=#-blazing-fast-performance class="table-of-contents__link toc-highlight">⚡ <strong>Blazing Fast Performance</strong></a><li><a href=#-compact-data-size class="table-of-contents__link toc-highlight">📦 Compact Data Size</a><li><a href=#️-security--safety class="table-of-contents__link toc-highlight">🛡️ <strong>Security & Safety</strong></a></ul><li><a href=#-installation class="table-of-contents__link toc-highlight">📦 Installation</a><ul><li><a href=#basic-installation class="table-of-contents__link toc-highlight">Basic Installation</a><li><a href=#optional-dependencies class="table-of-contents__link toc-highlight">Optional Dependencies</a><li><a href=#requirements class="table-of-contents__link toc-highlight">Requirements</a></ul><li><a href=#-python-native-serialization class="table-of-contents__link toc-highlight">🐍 Python Native Serialization</a><ul><li><a href=#basic-object-serialization class="table-of-contents__link toc-highlight">Basic Object Serialization</a><li><a href=#custom-class-serialization class="table-of-contents__link toc-highlight">Custom Class Serialization</a><li><a href=#drop-in-replacement-for-picklecloudpickle class="table-of-contents__link toc-highlight">Drop-in Replacement for Pickle/Cloudpickle</a><li><a href=#out-of-band-buffer-serialization class="table-of-contents__link toc-highlight">Out-of-Band Buffer Serialization</a></ul><li><a href=#️-cross-language-object-graph-serialization class="table-of-contents__link toc-highlight">🏃♂️ Cross-Language Object Graph Serialization</a><ul><li><a href=#cross-language-serialization class="table-of-contents__link toc-highlight">Cross-Language Serialization</a></ul><li><a href=#-row-format---zero-copy-processing class="table-of-contents__link toc-highlight">📊 Row Format - Zero-Copy Processing</a><ul><li><a href=#basic-row-format-usage class="table-of-contents__link toc-highlight">Basic Row Format Usage</a><li><a href=#cross-language-compatibility class="table-of-contents__link toc-highlight">Cross-Language Compatibility</a><li><a href=#key-benefits class="table-of-contents__link toc-highlight">Key Benefits</a></ul><li><a href=#️-core-api-reference class="table-of-contents__link toc-highlight">🏗️ Core API Reference</a><ul><li><a href=#fory-class class="table-of-contents__link toc-highlight">Fory Class</a><li><a href=#threadsafefory-class class="table-of-contents__link toc-highlight">ThreadSafeFory Class</a><li><a href=#language-modes-comparison class="table-of-contents__link toc-highlight">Language Modes Comparison</a></ul><li><a href=#-advanced-features class="table-of-contents__link toc-highlight">🔧 Advanced Features</a><ul><li><a href=#reference-tracking--circular-references class="table-of-contents__link toc-highlight">Reference Tracking & Circular References</a><li><a href=#type-registration--security class="table-of-contents__link toc-highlight">Type Registration & Security</a><li><a href=#custom-serializers class="table-of-contents__link toc-highlight">Custom Serializers</a><li><a href=#numpy--scientific-computing class="table-of-contents__link toc-highlight">Numpy & Scientific Computing</a></ul><li><a href=#-best-practices class="table-of-contents__link toc-highlight">💡 Best Practices</a><ul><li><a href=#production-configuration class="table-of-contents__link toc-highlight">Production Configuration</a><li><a href=#performance-tips class="table-of-contents__link toc-highlight">Performance Tips</a><li><a href=#type-registration-patterns class="table-of-contents__link toc-highlight">Type Registration Patterns</a><li><a href=#error-handling class="table-of-contents__link toc-highlight">Error Handling</a></ul><li><a href=#️-migration-guide class="table-of-contents__link toc-highlight">🛠️ Migration Guide</a><ul><li><a href=#from-pickle class="table-of-contents__link toc-highlight">From Pickle</a><li><a href=#from-json class="table-of-contents__link toc-highlight">From JSON</a></ul><li><a href=#-security-best-practices class="table-of-contents__link toc-highlight">🚨 Security Best Practices</a><ul><li><a href=#production-configuration-1 class="table-of-contents__link toc-highlight">Production Configuration</a><li><a href=#development-vs-production class="table-of-contents__link toc-highlight">Development vs Production</a><li><a href=#deserializationpolicy class="table-of-contents__link toc-highlight">DeserializationPolicy</a></ul><li><a href=#-troubleshooting class="table-of-contents__link toc-highlight">🐛 Troubleshooting</a><ul><li><a href=#common-issues class="table-of-contents__link toc-highlight">Common Issues</a><li><a href=#debug-mode class="table-of-contents__link toc-highlight">Debug Mode</a></ul><li><a href=#-contributing class="table-of-contents__link toc-highlight">🤝 Contributing</a><ul><li><a href=#how-to-contribute class="table-of-contents__link toc-highlight">How to Contribute</a><li><a href=#development-setup class="table-of-contents__link toc-highlight">Development Setup</a></ul><li><a href=#-license class="table-of-contents__link toc-highlight">📄 License</a><li><a href=#-links class="table-of-contents__link toc-highlight">🔗 Links</a><li><a href=#-community class="table-of-contents__link toc-highlight">🌟 Community</a></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Community</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://lists.apache.org/list.html?dev@fory.apache.org target=_blank rel="noopener noreferrer" class=footer__link-item>Mailing list<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://join.slack.com/t/fory-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A target=_blank rel="noopener noreferrer" class=footer__link-item>Slack<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://twitter.com/ApacheFory target=_blank rel="noopener noreferrer" class=footer__link-item>Twitter<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Docs</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/docs/start/install>Install</a><li class=footer__item><a class=footer__link-item href=/docs/start/usage>Usage</a><li class=footer__item><a class=footer__link-item href=/docs/introduction/benchmark>Benchmark</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Repositories</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class=footer__link-item>Apache Fory™<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://github.com/apache/fory-site target=_blank rel="noopener noreferrer" class=footer__link-item>Website<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div></div><div class="footer__bottom text--center"><div class=margin-bottom--sm><a href=https://apache.org/ rel="noopener noreferrer" class=footerLogoLink_BH7S><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width=200 /><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width=200 /></a></div><div class=footer__copyright><div> |
| <p> |
| Copyright © 2026 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br/> |
| Apache Fory, Fory, Apache, the Apache Logo and the Apache Fory logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. |
| </p> |
| </div></div></div></div></footer></div></body> |