blob: d3340047fe09f93ecd60c4c8f1c39031d98254ef [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61232409-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-61232409-1');
</script>
<meta charset="UTF-8">
<meta name="ignite-version" content="2.9.0" />
<title>Data Format | Ignite Documentation</title>
<link rel="canonical" href="/docs/2.9.0/binary-client-protocol/data-format" />
<META NAME="ROBOTS" CONTENT="NOINDEX" />
<link rel="stylesheet" href="/assets/css/styles.css?1609302779">
<link rel="stylesheet" href="/assets/css/asciidoc-pygments.css">
<link rel="shortcut icon" href="/favicon.ico">
<meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'>
<script type="text/javascript" src="/assets/js/anchor.min.js?1609302779"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" />
</head>
<body>
<header>
<!--#include virtual="/includes/promotion_banner.html" -->
<div class="container">
<button type='button' class='menu' title='Docs menu'>
<img src="/assets/images/menu-icon.svg"/>
</button>
<div class='home'>
<a href="/" class='home' title='Apache Ignite home'>
<img src="/assets/images/apache_ignite_logo.svg" alt="Apache Ignite logo" width="103" >
</a>
</div>
<select id="version-selector">
<option value="2.9.0">2.9.0</option>
</select>
<nav id="api-docs">
<li><a href="#">APIs</a>
<nav class='dropdown'>
<li class="dropdown-item"><a href="/releases/latest/javadoc/index.html">Java</a></li>
<li class="dropdown-item"><a href="/releases/latest/dotnetdoc/api/">C#/.NET</a></li>
<li class="dropdown-item"><a href="/releases/latest/cppdoc/index.html">C++</a></li>
<li class="dropdown-item"><a href="/releases/latest/scaladoc/scalar/index.html#org.apache.ignite.scalar.scalar$">Scala</a></li>
</nav>
</li>
<li><a href="#">Examples</a>
<nav class="dropdown">
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/examples" target="_blank" rel="noopener" title="Apache Ignite Java examples">Java</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/dotnet/examples" target="_blank" rel="noopener" title="Apache Ignite C#/.NET examples">C#/.NET</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/cpp/examples" target="_blank" rel="noopener" title="Apache Ignite C++ examples">C++</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/python/examples" target="_blank" rel="noopener" title="Apache Ignite Python examples">Python</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/nodejs/examples" target="_blank" rel="noopener" title="Apache Ignite NodeJS examples">NodeJS</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/php/examples" target="_blank" rel="noopener" title="Apache Ignite PHP examples">PHP</a></li>
</nav>
</li>
</nav>
<form class='search'>
<button class="search-close" type='button'><img src='/assets/images/cancel.svg'></button>
<input type="search" placeholder="Search…" id="search-input">
</form>
<button type='button' class='search-toggle'><img src='/assets/images/search.svg'></button>
<nav id="lang-selector">
<li><a href="#"><img src="/assets/images/icon_lang_en.png" alt="English language icon" /><span></span></a>
<nav class="dropdown">
<li class="dropdown-item"><a href="/docs/latest/" ><img src="/assets/images/icon_lang_en.png" alt="English language icon" /><span>English</span></a></li>
<li class="dropdown-item"><a href="https://www.ignite-service.cn/doc/java/" target="_blank" rel="noopener"><img src="/assets/images/icon_lang_cn.png" alt="Chinese language icon" /><span>Chinese</span></a></li>
</nav>
</li>
</nav>
<button type='button' class='top-nav-toggle'></button>
</div>
</header>
<link rel="stylesheet" href="/assets/css/docs.css">
<section class='page-docs'>
<nav class='left-nav' data-swiftype-index='false'>
<li>
<a href="/docs/2.9.0/index" class='' >Documentation Overview</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Quick Start Guides<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/quick-start/java"
class=''
>Java</a>
</li>
<li>
<a href="/docs/2.9.0/quick-start/dotnet"
class=''
>.NET/C#</a>
</li>
<li>
<a href="/docs/2.9.0/quick-start/cpp"
class=''
>C++</a>
</li>
<li>
<a href="/docs/2.9.0/quick-start/python"
class=''
>Python</a>
</li>
<li>
<a href="/docs/2.9.0/quick-start/nodejs"
class=''
>Node.JS</a>
</li>
<li>
<a href="/docs/2.9.0/quick-start/sql"
class=''
>SQL</a>
</li>
<li>
<a href="/docs/2.9.0/quick-start/php"
class=''
>PHP</a>
</li>
<li>
<a href="/docs/2.9.0/quick-start/restapi"
class=''
>REST API</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Installation<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/installation/installing-using-zip"
class=''
>Installing Using ZIP Archive</a>
</li>
<li>
<a href="/docs/2.9.0/installation/installing-using-docker"
class=''
>Installing Using Docker</a>
</li>
<li>
<a href="/docs/2.9.0/installation/deb-rpm"
class=''
>Installing DEB or RPM package</a>
</li>
<li>
<button
type='button'
class='collapsed '>Kubernetes<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/installation/kubernetes/amazon-eks-deployment" class=''>Amazon EKS</a></li>
<li><a href="/docs/2.9.0/installation/kubernetes/azure-deployment" class=''>Azure Kubernetes Service</a></li>
<li><a href="/docs/2.9.0/installation/kubernetes/gke-deployment" class=''>Google Kubernetes Engine</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/installation/vmware-installation"
class=''
>VMWare</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Setting Up<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/understanding-configuration"
class=''
>Understanding Configuration</a>
</li>
<li>
<a href="/docs/2.9.0/setup"
class=''
>Setting Up</a>
</li>
<li>
<a href="/docs/2.9.0/logging"
class=''
>Configuring Logging</a>
</li>
<li>
<a href="/docs/2.9.0/resources-injection"
class=''
>Resources Injection</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/starting-nodes" class='' >Starting and Stopping Nodes</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/clustering/clustering"
class=''
>Overview</a>
</li>
<li>
<a href="/docs/2.9.0/clustering/tcp-ip-discovery"
class=''
>TCP/IP Discovery</a>
</li>
<li>
<a href="/docs/2.9.0/clustering/zookeeper-discovery"
class=''
>ZooKeeper Discovery</a>
</li>
<li>
<a href="/docs/2.9.0/clustering/discovery-in-the-cloud"
class=''
>Discovery in the Cloud</a>
</li>
<li>
<a href="/docs/2.9.0/clustering/network-configuration"
class=''
>Network Configuration</a>
</li>
<li>
<a href="/docs/2.9.0/clustering/connect-client-nodes"
class=''
>Connecting Client Nodes</a>
</li>
<li>
<a href="/docs/2.9.0/clustering/baseline-topology"
class=''
>Baseline Topology</a>
</li>
<li>
<a href="/docs/2.9.0/clustering/running-client-nodes-behind-nat"
class=''
>Running Client Nodes Behind NAT</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle expanded '>Thin Clients<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group expanded'>
<li>
<a href="/docs/2.9.0/thin-clients/getting-started-with-thin-clients"
class=''
>Thin Clients Overview</a>
</li>
<li>
<a href="/docs/2.9.0/thin-clients/java-thin-client"
class=''
>Java Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0/thin-clients/dotnet-thin-client"
class=''
>.NET Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0/thin-clients/cpp-thin-client"
class=''
>C++ Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0/thin-clients/python-thin-client"
class=''
>Python Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0/thin-clients/php-thin-client"
class=''
>PHP Thin Client</a>
</li>
<li>
<a href="/docs/2.9.0/thin-clients/nodejs-thin-client"
class=''
>Node.js Thin Client</a>
</li>
<li>
<button
type='button'
class='expanded parent '>Binary Client Protocol<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages expanded parent">
<li><a href="/docs/2.9.0/binary-client-protocol/binary-client-protocol" class=''>Binary Client Protocol</a></li>
<li><a href="/docs/2.9.0/binary-client-protocol/data-format" class='active'>Data Format</a></li>
<li><a href="/docs/2.9.0/binary-client-protocol/key-value-queries" class=''>Key-Value Queries</a></li>
<li><a href="/docs/2.9.0/binary-client-protocol/sql-and-scan-queries" class=''>SQL and Scan Queries</a></li>
<li><a href="/docs/2.9.0/binary-client-protocol/binary-type-metadata" class=''>Binary Types Metadata</a></li>
<li><a href="/docs/2.9.0/binary-client-protocol/cache-configuration" class=''>Cache Configuration</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Data Modeling<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/data-modeling/data-modeling"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.9.0/data-modeling/data-partitioning"
class=''
>Data Partitioning</a>
</li>
<li>
<a href="/docs/2.9.0/data-modeling/affinity-collocation"
class=''
>Affinity Colocation</a>
</li>
<li>
<a href="/docs/2.9.0/data-modeling/binary-marshaller"
class=''
>Binary Marshaller</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Memory<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/memory-architecture"
class=''
>Memory Architecture</a>
</li>
<li>
<a href="/docs/2.9.0/memory-configuration/data-regions"
class=''
>Configuring Data Regions</a>
</li>
<li>
<a href="/docs/2.9.0/memory-configuration/eviction-policies"
class=''
>Eviction Policies</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Persistence<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/persistence/native-persistence"
class=''
>Ignite Persistence</a>
</li>
<li>
<a href="/docs/2.9.0/persistence/external-storage"
class=''
>External Storage</a>
</li>
<li>
<a href="/docs/2.9.0/persistence/swap"
class=''
>Swapping</a>
</li>
<li>
<a href="/docs/2.9.0/persistence/custom-cache-store"
class=''
>Implementing Custom Cache Store</a>
</li>
<li>
<a href="/docs/2.9.0/persistence/snapshots"
class=''
>Cluster Snapshots</a>
</li>
<li>
<a href="/docs/2.9.0/persistence/disk-compression"
class=''
>Disk Compression</a>
</li>
<li>
<a href="/docs/2.9.0/persistence/persistence-tuning"
class=''
>Tuning Persistence</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Caches<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/configuring-caches/configuration-overview"
class=''
>Cache Configuration</a>
</li>
<li>
<a href="/docs/2.9.0/configuring-caches/configuring-backups"
class=''
>Configuring Partition Backups</a>
</li>
<li>
<a href="/docs/2.9.0/configuring-caches/partition-loss-policy"
class=''
>Partition Loss Policy</a>
</li>
<li>
<a href="/docs/2.9.0/configuring-caches/atomicity-modes"
class=''
>Atomicity Modes</a>
</li>
<li>
<a href="/docs/2.9.0/configuring-caches/expiry-policies"
class=''
>Expiry Policy</a>
</li>
<li>
<a href="/docs/2.9.0/configuring-caches/on-heap-caching"
class=''
>On-Heap Caching</a>
</li>
<li>
<a href="/docs/2.9.0/configuring-caches/cache-groups"
class=''
>Cache Groups</a>
</li>
<li>
<a href="/docs/2.9.0/configuring-caches/near-cache"
class=''
>Near Caches</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/data-rebalancing" class='' >Data Rebalancing</a>
</li>
<li>
<a href="/docs/2.9.0/data-streaming" class='' >Data Streaming</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Using Key-Value API<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/key-value-api/basic-cache-operations"
class=''
>Basic Cache Operations</a>
</li>
<li>
<a href="/docs/2.9.0/key-value-api/binary-objects"
class=''
>Working with Binary Objects</a>
</li>
<li>
<a href="/docs/2.9.0/key-value-api/using-scan-queries"
class=''
>Using Scan Queries</a>
</li>
<li>
<a href="/docs/2.9.0/read-repair"
class=''
>Read Repair</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/key-value-api/transactions" class='' >Performing Transactions</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Working with SQL<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/SQL/sql-introduction"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/schemas"
class=''
>Understanding Schemas</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/indexes"
class=''
>Defining Indexes</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/sql-api"
class=''
>Using SQL API</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/distributed-joins"
class=''
>Distributed Joins</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/sql-transactions"
class=''
>SQL Transactions</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/custom-sql-func"
class=''
>Custom SQL Functions</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/JDBC/jdbc-driver"
class=''
>JDBC Driver</a>
</li>
<li>
<a href="/docs/2.9.0/SQL/JDBC/jdbc-client-driver"
class=''
>JDBC Client Driver</a>
</li>
<li>
<button
type='button'
class='collapsed '>ODBC Driver<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/SQL/ODBC/odbc-driver" class=''>ODBC Driver</a></li>
<li><a href="/docs/2.9.0//SQL/ODBC/connection-string-dsn" class=''>Connection String and DSN</a></li>
<li><a href="/docs/2.9.0/SQL/ODBC/querying-modifying-data" class=''>Querying and Modifying Data</a></li>
<li><a href="/docs/2.9.0/SQL/ODBC/specification" class=''>Specification</a></li>
<li><a href="/docs/2.9.0/SQL/ODBC/data-types" class=''>Data Types</a></li>
<li><a href="/docs/2.9.0/SQL/ODBC/error-codes" class=''>Error Codes</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/transactions/mvcc"
class=''
>Multiversion Concurrency Control</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>SQL Reference<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/sql-reference/sql-conformance"
class=''
>SQL Conformance</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/ddl"
class=''
>Data Definition Language (DDL)</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/dml"
class=''
>Data Manipulation Language (DML)</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/transactions"
class=''
>Transactions</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/operational-commands"
class=''
>Operational Commands</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/aggregate-functions"
class=''
>Aggregate functions</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/numeric-functions"
class=''
>Numeric Functions</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/string-functions"
class=''
>String Functions</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/date-time-functions"
class=''
>Data and Time Functions</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/system-functions"
class=''
>System Functions</a>
</li>
<li>
<a href="/docs/2.9.0/sql-reference/data-types"
class=''
>Data Types</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Distributed Computing<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/distributed-computing/distributed-computing"
class=''
>Distributed Computing API</a>
</li>
<li>
<a href="/docs/2.9.0/distributed-computing/cluster-groups"
class=''
>Cluster Groups</a>
</li>
<li>
<a href="/docs/2.9.0/distributed-computing/executor-service"
class=''
>Executor Service</a>
</li>
<li>
<a href="/docs/2.9.0/distributed-computing/map-reduce"
class=''
>MapReduce API</a>
</li>
<li>
<a href="/docs/2.9.0/distributed-computing/load-balancing"
class=''
>Load Balancing</a>
</li>
<li>
<a href="/docs/2.9.0/distributed-computing/fault-tolerance"
class=''
>Fault Tolerance</a>
</li>
<li>
<a href="/docs/2.9.0/distributed-computing/job-scheduling"
class=''
>Job Scheduling</a>
</li>
<li>
<a href="/docs/2.9.0/distributed-computing/collocated-computations"
class=''
>Colocating Computations with Data</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Code Deployment<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/code-deployment/deploying-user-code"
class=''
>Deploying User Code</a>
</li>
<li>
<a href="/docs/2.9.0/code-deployment/peer-class-loading"
class=''
>Peer Class Loading</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Machine Learning<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/machine-learning/machine-learning"
class=''
>Machine Learning</a>
</li>
<li>
<a href="/docs/2.9.0/machine-learning/partition-based-dataset"
class=''
>Partition Based Dataset</a>
</li>
<li>
<a href="/docs/2.9.0/machine-learning/updating-trained-models"
class=''
>Updating Trained Models</a>
</li>
<li>
<button
type='button'
class='collapsed '>Binary Classification<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/machine-learning/binary-classification/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0/machine-learning/binary-classification/linear-svm" class=''>Linear SVM (Support Vector Machine)</a></li>
<li><a href="/docs/2.9.0/machine-learning/binary-classification/decision-trees" class=''>Decision Trees</a></li>
<li><a href="/docs/2.9.0/machine-learning/binary-classification/multilayer-perceptron" class=''>Multilayer Perceptron</a></li>
<li><a href="/docs/2.9.0/machine-learning/binary-classification/logistic-regression" class=''>Logistic Regression</a></li>
<li><a href="/docs/2.9.0/machine-learning/binary-classification/knn-classification" class=''>k-NN Classification</a></li>
<li><a href="/docs/2.9.0/machine-learning/binary-classification/ann" class=''>ANN (Approximate Nearest Neighbor)</a></li>
<li><a href="/docs/2.9.0/machine-learning/binary-classification/naive-bayes" class=''>Naive Bayes</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Regression<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/machine-learning/regression/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0/machine-learning/regression/linear-regression" class=''>Linear Regression</a></li>
<li><a href="/docs/2.9.0/machine-learning/regression/decision-trees-regression" class=''>Decision Trees Regression</a></li>
<li><a href="/docs/2.9.0/machine-learning/regression/knn-regression" class=''>k-NN Regression</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/machine-learning/clustering/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0/machine-learning/clustering/k-means-clustering" class=''>K-Means Clustering</a></li>
<li><a href="/docs/2.9.0/machine-learning/clustering/gaussian-mixture" class=''>Gaussian mixture (GMM)</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/machine-learning/preprocessing"
class=''
>Preprocessing</a>
</li>
<li>
<button
type='button'
class='collapsed '>Model Selection<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/machine-learning/model-selection/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0/machine-learning/model-selection/evaluator" class=''>Evaluator</a></li>
<li><a href="/docs/2.9.0/machine-learning/model-selection/split-the-dataset-on-test-and-train-datasets" class=''>Split the dataset on test and train datasets</a></li>
<li><a href="/docs/2.9.0/machine-learning/model-selection/hyper-parameter-tuning" class=''>Hyper-parameter tuning</a></li>
<li><a href="/docs/2.9.0/machine-learning/model-selection/pipeline-api" class=''>Pipeline API</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/machine-learning/multiclass-classification"
class=''
>Multiclass Classification</a>
</li>
<li>
<button
type='button'
class='collapsed '>Ensemble Methods<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/machine-learning/ensemble-methods/introduction" class=''></a></li>
<li><a href="/docs/2.9.0/machine-learning/ensemble-methods/stacking" class=''>Stacking</a></li>
<li><a href="/docs/2.9.0/machine-learning/ensemble-methods/baggin" class=''>Bagging</a></li>
<li><a href="/docs/2.9.0/machine-learning/ensemble-methods/random-forest" class=''>Random Forest</a></li>
<li><a href="/docs/2.9.0/machine-learning/ensemble-methods/gradient-boosting" class=''>Gradient Boosting</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/machine-learning/recommendation-systems"
class=''
>Recommendation Systems</a>
</li>
<li>
<button
type='button'
class='collapsed '>Importing Model<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/machine-learning/importing-model/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0/machine-learning/importing-model/model-import-from-gxboost" class=''>Import Model from XGBoost</a></li>
<li><a href="/docs/2.9.0/machine-learning/importing-model/model-import-from-apache-spark" class=''>Import Model from Apache Spark</a></li>
</nav>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/key-value-api/continuous-queries" class='' >Using Continuous Queries</a>
</li>
<li>
<a href="/docs/2.9.0/services/services" class='' >Using Ignite Services</a>
</li>
<li>
<a href="/docs/2.9.0/messaging" class='' >Using Ignite Messaging</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Distributed Data Structures<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/data-structures/queue-and-set"
class=''
>Queue and Set</a>
</li>
<li>
<a href="/docs/2.9.0/data-structures/atomic-types"
class=''
>Atomic Types</a>
</li>
<li>
<a href="/docs/2.9.0/data-structures/countdownlatch"
class=''
>CountDownLatch</a>
</li>
<li>
<a href="/docs/2.9.0/data-structures/atomic-sequence"
class=''
>Atomic Sequence</a>
</li>
<li>
<a href="/docs/2.9.0/data-structures/semaphore"
class=''
>Semaphore</a>
</li>
<li>
<a href="/docs/2.9.0/data-structures/id-generator"
class=''
>ID Generator</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/distributed-locks" class='' >Distributed Locks</a>
</li>
<li>
<a href="/docs/2.9.0/restapi" class='' >REST API</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>.NET Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/net-specific/net-configuration-options"
class=''
>Configuration Options</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-deployment-options"
class=''
>Deployment Options</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-standalone-nodes"
class=''
>Standalone Nodes</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-logging"
class=''
>Logging</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-linq"
class=''
>LINQ</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-java-services-execution"
class=''
>Java Services Execution</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-platform-cache"
class=''
>.NET Platform Cache</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-plugins"
class=''
>Plugins</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-serialization"
class=''
>Serialization</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-cross-platform-support"
class=''
>Cross-Platform Support</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-platform-interoperability"
class=''
>Platform Interoperability</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-remote-assembly-loading"
class=''
>Remote Assembly Loading</a>
</li>
<li>
<a href="/docs/2.9.0/net-specific/net-troubleshooting"
class=''
>Troubleshooting</a>
</li>
<li>
<button
type='button'
class='collapsed '>Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/net-specific/asp-net-output-caching" class=''>ASP.NET Output Caching</a></li>
<li><a href="/docs/2.9.0/net-specific/asp-net-session-state-caching" class=''>ASP.NET Session State Caching</a></li>
<li><a href="/docs/2.9.0/net-specific/net-entity-framework-cache" class=''>Entity Framework 2nd Level Cache</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>C++ Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/cpp-specific/cpp-serialization"
class=''
>Serialization</a>
</li>
<li>
<a href="/docs/2.9.0/cpp-specific/cpp-platform-interoperability"
class=''
>Platform Interoperability</a>
</li>
<li>
<a href="/docs/2.9.0/cpp-specific/cpp-objects-lifetime"
class=''
>Objects Lifetime</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Monitoring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/monitoring-metrics/intro"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.9.0/monitoring-metrics/cluster-id"
class=''
>Cluster ID and Tag</a>
</li>
<li>
<a href="/docs/2.9.0/monitoring-metrics/cluster-states"
class=''
>Cluster States</a>
</li>
<li>
<button
type='button'
class='collapsed '>Metrics<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/monitoring-metrics/configuring-metrics" class=''>Configuring Metrics</a></li>
<li><a href="/docs/2.9.0/monitoring-metrics/metrics" class=''>JMX Metrics</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>New Metrics System<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/monitoring-metrics/new-metrics-system" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0/monitoring-metrics/new-metrics" class=''>Metrics</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/monitoring-metrics/system-views"
class=''
>System Views</a>
</li>
<li>
<a href="/docs/2.9.0/monitoring-metrics/tracing"
class=''
>Tracing</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Working with Events<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/events/listening-to-events"
class=''
>Enabling and Listenting to Events</a>
</li>
<li>
<a href="/docs/2.9.0/events/events"
class=''
>Events</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Tools<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/tools/control-script"
class=''
>Control Script</a>
</li>
<li>
<a href="/docs/2.9.0/tools/visor-cmd"
class=''
>Visor CMD</a>
</li>
<li>
<a href="/docs/2.9.0/tools/gg-control-center"
class=''
>GridGain Control Center</a>
</li>
<li>
<a href="/docs/2.9.0/tools/sqlline"
class=''
>SQLLine</a>
</li>
<li>
<a href="/docs/2.9.0/tools/tableau"
class=''
>Tableau</a>
</li>
<li>
<a href="/docs/2.9.0/tools/informatica"
class=''
>Informatica</a>
</li>
<li>
<a href="/docs/2.9.0/tools/pentaho"
class=''
>Pentaho</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Security<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/security/authentication"
class=''
>Authentication</a>
</li>
<li>
<a href="/docs/2.9.0/security/ssl-tls"
class=''
>SSL/TLS</a>
</li>
<li>
<button
type='button'
class='collapsed '>Transparent Data Encryption<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/security/tde" class=''>Introduction</a></li>
<li><a href="/docs/2.9.0/security/master-key-rotation" class=''>Master key rotation</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/security/sandbox"
class=''
>Sandbox</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Extensions and Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<button
type='button'
class='collapsed '>Spring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/extensions-and-integrations/spring/spring-boot" class=''>Spring Boot</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/spring/spring-data" class=''>Spring Data</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/spring/spring-caching" class=''>Spring Caching</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Ignite for Spark<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/extensions-and-integrations/ignite-for-spark/overview" class=''>Overview</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/ignite-for-spark/ignitecontext-and-rdd" class=''>IgniteContext and IgniteRDD</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/ignite-for-spark/ignite-dataframe" class=''>Ignite DataFrame</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/ignite-for-spark/installation" class=''>Installation</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/ignite-for-spark/spark-shell" class=''>Test Ignite with Spark-shell</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/ignite-for-spark/troubleshooting" class=''>Troubleshooting</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/extensions-and-integrations/hibernate-l2-cache"
class=''
>Hibernate L2 Cache</a>
</li>
<li>
<a href="/docs/2.9.0/extensions-and-integrations/mybatis-l2-cache"
class=''
>MyBatis L2 Cache</a>
</li>
<li>
<button
type='button'
class='collapsed '>Streaming<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/kafka-streamer" class=''>Kafka Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/camel-streamer" class=''>Camel Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/flink-streamer" class=''>Flink Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/flume-sink" class=''>Flume Sink</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/jms-streamer" class=''>JMS Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/mqtt-streamer" class=''>MQTT Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/rocketmq-streamer" class=''>RocketMQ Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/storm-streamer" class=''>Storm Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/zeromq-streamer" class=''>ZeroMQ Streamer</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/streaming/twitter-streamer" class=''>Twitter Streamer</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Cassandra Integration<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.9.0/extensions-and-integrations/cassandra/overview" class=''>Overview</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/cassandra/configuration" class=''>Configuration</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/cassandra/usage-examples" class=''>Usage Examples</a></li>
<li><a href="/docs/2.9.0/extensions-and-integrations/cassandra/ddl-generator" class=''>DDL Generator</a></li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/extensions-and-integrations/php-pdo"
class=''
>PHP PDO</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.9.0/plugins" class='' >Plugins</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Performance and Troubleshooting<img class="state-indicator" src="/assets/images/left-nav-arrow.svg"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/general-perf-tips"
class=''
>General Performance Tips</a>
</li>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/memory-tuning"
class=''
>Memory and JVM Tuning</a>
</li>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/persistence-tuning"
class=''
>Persistence Tuning</a>
</li>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/sql-tuning"
class=''
>SQL Tuning</a>
</li>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/thread-pools-tuning"
class=''
>Thread Pools Tuning</a>
</li>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/troubleshooting"
class=''
>Troubleshooting and Debugging</a>
</li>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/handling-exceptions"
class=''
>Handling Exceptions</a>
</li>
<li>
<a href="/docs/2.9.0/perf-and-troubleshooting/yardstick-benchmarking"
class=''
>Benchmarking With Yardstick</a>
</li>
</nav>
</li>
</nav>
<div class="left-nav__overlay"></div>
<article data-swiftype-index='true'>
<a class='edit-link' href="https://github.com/apache/ignite/tree/IGNITE-7595/docs/_docs/binary-client-protocol/data-format.adoc" target="_blank">Edit</a>
<h1>Data Format</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Standard data types are represented as a combination of type code and value.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>type_code</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed one-byte integer code that indicates the type of the value.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>value</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Value itself. Its format and size depends on the type_code</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>Below you can find description of the supported types and their format.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="primitives">Primitives</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Primitives are the very basic types, such as numbers.</p>
</div>
<div class="sect2">
<h3 id="byte">Byte</h3>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Single byte value.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="short">Short</h3>
<div class="paragraph">
<p>Type code: 2;</p>
</div>
<div class="paragraph">
<p>2-bytes long signed integer number. Little-endian.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Value</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="int">Int</h3>
<div class="paragraph">
<p>Type code: 3;</p>
</div>
<div class="paragraph">
<p>4-bytes long signed integer number. Little-endian.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>value</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="long">Long</h3>
<div class="paragraph">
<p>Type code: 4;</p>
</div>
<div class="paragraph">
<p>8-bytes long signed integer number. Little-endian.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>value</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="float">Float</h3>
<div class="paragraph">
<p>Type code: 5;</p>
</div>
<div class="paragraph">
<p>4-byte long IEEE 754 floating-point number. Little-endian.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="double">Double</h3>
<div class="paragraph">
<p>Type code: 6;</p>
</div>
<div class="paragraph">
<p>8-byte long IEEE 754 floating-point number. Little-endian.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="char">Char</h3>
<div class="paragraph">
<p>Type code: 7;</p>
</div>
<div class="paragraph">
<p>Single UTF-16 code unit. Little-endian.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The UTF-16 code unit in little-endian.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="bool">Bool</h3>
<div class="paragraph">
<p>Type code: 8;</p>
</div>
<div class="paragraph">
<p>Boolean value. Zero for false and non-zero for true.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value. Zero for false and non-zero for true.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="null">NULL</h3>
<div class="paragraph">
<p>Type code: 101;</p>
</div>
<div class="paragraph">
<p>This is not exactly a type. It&#8217;s just a null value, which can be assigned to object of any type.
Has no payload, only consists of the type code.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="standard-objects">Standard objects</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="string">String</h3>
<div class="paragraph">
<p>Type code: 9;</p>
</div>
<div class="paragraph">
<p>String in UTF-8 encoding. Should always be a valid UTF-8 string.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. Length of the string in UTF-8 code units, i.e. in bytes.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">data</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">String data in UTF-8 encoding. Without BOM.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="uuid-guid">UUID (Guid)</h3>
<div class="paragraph">
<p>Type code: 10;</p>
</div>
<div class="paragraph">
<p>A universally unique identifier (UUID) is a 128-bit number used to identify information in computer systems.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">most_significant_bits</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">64-bit number in little endian, representing 64 most significant bits of UUID.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">least_significant_bits</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">64-bit number in little endian, representing 64 least significant bits of UUID.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="timestamp">Timestamp</h3>
<div class="paragraph">
<p>Type code: 33;</p>
</div>
<div class="paragraph">
<p>More precise than a Date data type. Except for a milliseconds since epoch, contains a nanoseconds fraction of a last millisecond, which value could be in a range from 0 to 999999. It means, the full time stamp in nanoseconds can be obtained with the following expression: <code>msecs_since_epoch \* 1000000 + msec_fraction_in_nsecs</code>.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The nanoseconds time stamp evaluation expression is provided for clarification purposes only. One should not use the expression in production code, as in some languages the expression may result in integer number overflow.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>msecs_since_epoch</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. Number of milliseconds elapsed since 00:00:00 1 Jan 1970 UTC. This format widely known as a Unix or POSIX time.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>msec_fraction_in_nsecs</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. Nanosecond fraction of a millisecond.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="date">Date</h3>
<div class="paragraph">
<p>Type code: 11;</p>
</div>
<div class="paragraph">
<p>Date, represented as a number of milliseconds elapsed since 00:00:00 1 Jan 1970 UTC. This format widely known as a Unix or POSIX time.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>msecs_since_epoch</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value. Signed integer number in little-endian.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="time">Time</h3>
<div class="paragraph">
<p>Type code: 36;</p>
</div>
<div class="paragraph">
<p>Time, represented as a number of milliseconds elapsed since midnight, i.e. 00:00:00 UTC.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. Number of milliseconds elapsed since 00:00:00 UTC.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="decimal">Decimal</h3>
<div class="paragraph">
<p>Type code: 30;</p>
</div>
<div class="paragraph">
<p>Numeric value of any desired precision and scale.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">scale</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. Effectively, a power of the ten, on which the unscaled value should be divided. For example, 42 with scale 3 is 0.042, 42 with scale -3 is 42000, and 42 with scale 1 is 42.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. Length of the number in bytes.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">data</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">First bit is the flag of negativity. If it&#8217;s set to 1, then value is negative. Other bits form signed integer number of variable length in big-endian format.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="enum">Enum</h3>
<div class="paragraph">
<p>Type code: 28;</p>
</div>
<div class="paragraph">
<p>Value of an enumerable type. For such types defined only a finite number of named values.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type_id</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. See <a href="#type-id">Type ID</a> for details.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ordinal</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number stored in little-endian. Enumeration value ordinal . Its position in its enum declaration, where the initial constant is assigned an ordinal of zero.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="arrays-of-primitives">Arrays of primitives</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Arrays of this kind only contain payloads of values as elements. They all have similar format. See format description in a table below for details. Pay attention that array only contains payloads, not type codes.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>element_0_payload</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Depends on the type.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Payload of the value 0.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>element_1_payload</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Depends on the type.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Payload of the value 1.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>element_N_payload</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Depends on the type.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Payload of the value N.</p></td>
</tr>
</tbody>
</table>
<div class="sect2">
<h3 id="byte-array">Byte array</h3>
<div class="paragraph">
<p>Type code: 12;</p>
</div>
<div class="paragraph">
<p>Array of bytes. May be either a piece of raw data, or array of small signed integer numbers.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "byte".</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>Short array</p>
</div>
<div class="paragraph">
<p>Type code: 13;</p>
</div>
<div class="paragraph">
<p>Array of short signed integer numbers.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length * 2</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "short".</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="int-array">Int array</h3>
<div class="paragraph">
<p>Type code: 14;</p>
</div>
<div class="paragraph">
<p>Array of signed integer numbers.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length * 4</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "int".</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="long-array">Long array</h3>
<div class="paragraph">
<p>Type code: 15;</p>
</div>
<div class="paragraph">
<p>Array of long signed integer numbers.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length * 8</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "long".</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="float-array">Float array</h3>
<div class="paragraph">
<p>Type code: 16;</p>
</div>
<div class="paragraph">
<p>Array of floating point numbers.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length * 4</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "float".</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="double-array">Double array</h3>
<div class="paragraph">
<p>Type code: 17;</p>
</div>
<div class="paragraph">
<p>Array of floating point numbers with double precision.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length * 8</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "double".</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="char-array">Char array</h3>
<div class="paragraph">
<p>Type code: 18;</p>
</div>
<div class="paragraph">
<p>Array of UTF-16 code units. Unlike string, this type is not necessary contains valid UTF-16 text.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length * 2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "char".</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="bool-array">Bool array</h3>
<div class="paragraph">
<p>Type code: 19;</p>
</div>
<div class="paragraph">
<p>Array of boolean values.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a payload of type "bool".</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="arrays-of-standard-objects">Arrays of standard objects</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Arrays of this kind contain full values as elements. It means, their elements contain type code as well as payload. This format allows for elements of such collections to be NULL values. That&#8217;s why they are called "objects". They all have similar format. See format description in a table below for details.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>element_0_full_value</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Depends on value type.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Full value of the element 0. Contains of type code and payload. Also, can be NULL.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>element_1_full_value</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Depends on value type.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Full value of the element 1 or NULL.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>element_N_full_value</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Depends on value type.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Full value of the element N or NULL.</p></td>
</tr>
</tbody>
</table>
<div class="sect2">
<h3 id="string-array">String array</h3>
<div class="paragraph">
<p>Type code: 20;</p>
</div>
<div class="paragraph">
<p>Array of UTF-8 string values.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Depends on every string length. Every element size is either <code>5 + value_length</code> for string, or 1 for <code>NULL</code>.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of type "string", including type code, or <code>NULL</code>.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="uuid-guid-array">UUID (Guid) array</h3>
<div class="paragraph">
<p>Type code: 21;</p>
</div>
<div class="paragraph">
<p>Array of UUIDs (Guids).</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Every element size is either 17 for UUID, or 1 for NULL.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of type "UUID", including type code, or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="timestamp-array">Timestamp array</h3>
<div class="paragraph">
<p>Type code: 34;</p>
</div>
<div class="paragraph">
<p>Array of timestamp values.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Every element size is either 13 for Timestamp, or 1 for NULL.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of type "timestamp", including type code, or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="date-array">Date array</h3>
<div class="paragraph">
<p>Type code: 22;</p>
</div>
<div class="paragraph">
<p>Array of dates.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Every element size is either 9 for Date, or 1 for NULL.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of type "date", including type code, or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="time-array">Time array</h3>
<div class="paragraph">
<p>Type code: 37;</p>
</div>
<div class="paragraph">
<p>Array of time values.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Every element size is either 9 for Time, or 1 for NULL.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of type "time", including type code, or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="decimal-array">Decimal array</h3>
<div class="paragraph">
<p>Type code: 31;</p>
</div>
<div class="paragraph">
<p>Array of decimal values.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Every element size is either <code>9 + value_length</code> for Decimal, or 1 for NULL.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of type "decimal", including type code, or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="object-collections">Object collections</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="object-array">Object array</h3>
<div class="paragraph">
<p>Type code: 23;</p>
</div>
<div class="paragraph">
<p>Array of objects of any type. Can contain objects of any type. This includes standard objects of any type, as well as complex objects of various types, NULL values and any combinations of them. This also means, that collections may contain other collections.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type_id</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Type identifier of the contained objects. For example, in Java this type is used to de-serialize to a Type[]. Obviously, all values in array should have Type as a parent. It is parent type of any object type. For example, in Java this always can be java.lang.Object. Type ID for such "root" object type is -1. See <a href="#type-id">Type ID</a> for details.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the array.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Depends on sizes of the objects.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of any type or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="collection">Collection</h3>
<div class="paragraph">
<p>Type code: 24;</p>
</div>
<div class="paragraph">
<p>General collection type. Just as an object array, contains objects, but unlike array, it have a hint for a deserialization to a platform-specific collection of a certain type, not just an array. There are following collection types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>USER_SET</code> = -1. This is a general set type, which can not be mapped to more specific set type. Still, it is known, that it is set. It makes sense to deserialize such a collection to the basic and most widely used set-like type on your platform, e.g. hash set.</p>
</li>
<li>
<p><code>USER_COL</code> = 0. This is a general collection type, which can not be mapped to any more specific collection type. It makes sense to deserialize such a collection to the basic and most widely used collection type on your platform, e.g. resizeable array.</p>
</li>
<li>
<p><code>ARR_LIST</code> = 1. This is in fact a resizeable array type.</p>
</li>
<li>
<p><code>LINKED_LIST</code> = 2. This is a linked list type.</p>
</li>
<li>
<p><code>HASH_SET</code> = 3. This is a basic hash set type.</p>
</li>
<li>
<p><code>LINKED_HASH_SET</code> = 4. This is a hash set type, which maintains element order.</p>
</li>
<li>
<p><code>SINGLETON_LIST</code> = 5. This is a collection that only contains a single element, but behaves as a collection. Could be used by platforms for optimization purposes. If not applicable, any collection type could be used.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Collection type byte is used as a hint by a certain platform to deserialize a collection to the most suitable type. For example, in Java HASH_SET deserialized to java.util.HashSet, while LINKED_HASH_SET deserialized to java.util.LinkedHashSet. It is recommended for a thin client implementation to try and use the most suitable collection type on serialization and deserialization. But still, it is only a hint, which user can ignore if it is not relevant or not applicable for the platform.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the collection.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Type of the collection. See description for details.
elements</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="map">Map</h3>
<div class="paragraph">
<p>Type code: 25;</p>
</div>
<div class="paragraph">
<p>Map-like collection type. Contains pairs of key and value objects. Both key and value objects can be objects of a various types. It includes standard objects of various type, as well as complex objects of various types and any combinations of them. Have a hint for a deserialization to a map of a certain type. There are following map types:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>HASH_MAP</code> = 1. This is a basic hash map.</p>
</li>
<li>
<p><code>LINKED_HASH_MAP</code> = 2. This is a hash map, which maintains element order.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Map type byte is used as a hint by a certain platform to deserialize a collection to the most suitable type. It is recommended for a thin client implementation to try and use the most suitable map type on serialization and deserialization. But still, it is only a hint, which user can ignore if it is not relevant or not applicable for the platform.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the collection.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Type of the collection. See description for details.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Depends on sizes of the objects.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Elements here are keys and values, followed one by one in pairs. Every element is a full value of any type or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="enum-array">Enum array</h3>
<div class="paragraph">
<p>Type code: 29;</p>
</div>
<div class="paragraph">
<p>Array of enumerable type value. Element could be either enumerable value or null. So, any element either occupies 9 bytes or 1 byte.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type_id</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Type identifier of the contained objects. For example, in Java this type is used to de-serialize to a EnumType[]. Obviously, all values in array should have EnumType as a parent. It is parent type of any enumerable object type. See <a href="#type-id">Type ID</a> for details.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number. Number of elements in the collection.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">elements</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable. Depends on sizes of the objects.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Elements sequence. Every element is a full value of enum type or NULL.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="complex-object">Complex object</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Type code: 103;</p>
</div>
<div class="paragraph">
<p>Complex object consist of a 24-byte header, set of fields (data objects), and a schema (field IDs and positions). Depending on an operation and your data model, a data object can be of a primitive type or complex type (set of fields).</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Optionality</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>version</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mandatory</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>flags</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mandatory</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>type_id</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mandatory</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>hash_code</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mandatory</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>length</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mandatory</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>schema_id</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Mandatory</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>object_fields</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length. Optional</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>schema</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length. Optional</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>raw_data_offset</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Optional</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="version">Version</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This is a field, indicating complex object layout version. It is needed for backward compatibility. Clients should check this field and indicate error to a user, if the object layout version is unknown to them, to prevent data corruption and unpredictable results of the de-serialization.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="flags">Flags</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This field is 16-bit long little-endian bitmask. Contains object flags, which indicate how the object instance should be handled by a reader. There are following flags:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>USER_TYPE = 0x0001</code> - Indicates that type is a user type. Should be always set for any client type. Can be ignored on a de-serialization.</p>
</li>
<li>
<p><code>HAS_SCHEMA = 0x0002</code> - Indicates that object layout contains schema in the footer. See <a href="#schema">Schema</a> for details.</p>
</li>
<li>
<p><code>HAS_RAW_DATA = 0x0004</code> - Indicating that object has raw data. See <a href="#raw-data-offset">Raw data offset</a> for details.</p>
</li>
<li>
<p><code>OFFSET_ONE_BYTE = 0x0008</code> - Indicating that schema field offset is one byte long. See <a href="#schema">Schema</a> for details.</p>
</li>
<li>
<p><code>OFFSET_TWO_BYTES = 0x0010</code> - Indicating that schema field offset is two byte long. See <a href="#schema">Schema</a> for details.</p>
</li>
<li>
<p><code>COMPACT_FOOTER = 0x0020</code> - Indicating that footer does not contain field IDs, only offsets. See <a href="#schema">Schema</a> for details.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="type-id">Type ID</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This field contains a unique type identifier. It is 4 bytes long and stored in little-endian. By default, Type ID is obtained as a Java-style hash code of the type name. Type ID evaluation algorithm should be the same across all platforms in the cluster for all platforms to be able to operate with objects of this type. Default type ID calculation algorithm, which is recommended for use by all thin clients, can be found below.</p>
</div>
<code-tabs><code-tab data-tab='Java'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="kd">static</span> <span class="kt">int</span> <span class="nf">hashCode</span><span class="o">(</span><span class="nc">String</span> <span class="n">str</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="n">str</span><span class="o">.</span><span class="na">length</span><span class="o">;</span>
<span class="kt">int</span> <span class="n">h</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">len</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">c</span> <span class="o">=</span> <span class="n">str</span><span class="o">.</span><span class="na">charAt</span><span class="o">(</span><span class="n">i</span><span class="o">);</span>
<span class="n">c</span> <span class="o">=</span> <span class="nc">Character</span><span class="o">.</span><span class="na">toLowerCase</span><span class="o">(</span><span class="n">c</span><span class="o">);</span>
<span class="n">h</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">h</span> <span class="o">+</span> <span class="n">c</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">h</span><span class="o">;</span>
<span class="o">}</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='C'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c"><span class="kt">int32_t</span> <span class="nf">HashCode</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">val</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">val</span> <span class="o">&amp;&amp;</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="kt">int32_t</span> <span class="n">hash</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">char</span> <span class="n">c</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="k">if</span> <span class="p">(</span><span class="sc">'A'</span> <span class="o">&lt;=</span> <span class="n">c</span> <span class="o">&amp;&amp;</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="sc">'Z'</span><span class="p">)</span>
<span class="n">c</span> <span class="o">|=</span> <span class="mh">0x20</span><span class="p">;</span>
<span class="n">hash</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">hash</span> <span class="o">+</span> <span class="n">c</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">hash</span><span class="p">;</span>
<span class="p">}</span></code></pre>
</div>
</div></code-tab></code-tabs>
</div>
</div>
<div class="sect1">
<h2 id="hash-code">Hash code</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Hash code of the value. It is stored as a 4-byte long little-endian value and calculated as a Java-style hash of contents without header. Used by Ignite engine for comparisons, for example - to compare keys. Hash calculation algorithm can be found below.</p>
</div>
<code-tabs><code-tab data-tab='Java'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="kd">static</span> <span class="kt">int</span> <span class="nf">dataHashCode</span><span class="o">(</span><span class="kt">byte</span><span class="o">[]</span> <span class="n">data</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="na">length</span><span class="o">;</span>
<span class="kt">int</span> <span class="n">h</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">len</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span>
<span class="n">h</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">h</span> <span class="o">+</span> <span class="n">data</span><span class="o">[</span><span class="n">i</span><span class="o">];</span>
<span class="k">return</span> <span class="n">h</span><span class="o">;</span>
<span class="o">}</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='C'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c"><span class="kt">int32_t</span> <span class="nf">GetDataHashCode</span><span class="p">(</span><span class="k">const</span> <span class="kt">void</span><span class="o">*</span> <span class="n">data</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="kt">int32_t</span> <span class="n">hash</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">const</span> <span class="kt">int8_t</span><span class="o">*</span> <span class="n">bytes</span> <span class="o">=</span> <span class="n">static_cast</span><span class="o">&lt;</span><span class="k">const</span> <span class="kt">int8_t</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">data</span><span class="p">);</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span>
<span class="n">hash</span> <span class="o">=</span> <span class="mi">31</span> <span class="o">*</span> <span class="n">hash</span> <span class="o">+</span> <span class="n">bytes</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="k">return</span> <span class="n">hash</span><span class="p">;</span>
<span class="p">}</span></code></pre>
</div>
</div></code-tab></code-tabs>
</div>
</div>
<div class="sect1">
<h2 id="length">Length</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This field contains full length of the object including header. It is stored as a 4-byte long little-endian integer number. Using this field you can easily skip the whole object by simply increasing current data stream position by the value of this field.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="schema-id">Schema ID</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Object schema identifier. It is stored as a 4-byte long little-endian value and calculated as a hash of all object field IDs. It is used for complex object size optimization. Ignite uses schema ID to avoid writing of the whole schema to the end of the every complex object value. Instead, it stores all schemas in the binary metadata store and only writes field offsets to the object. This optimization helps to significantly reduce size for the complex object containing a lot of short fields (such as ints).</p>
</div>
<div class="paragraph">
<p>If the schema is missing (e.g. the whole object is written in raw mode, or have no fields at all), the schema ID field is 0.</p>
</div>
<div class="paragraph">
<p>See <a href="#schema">Schema</a> for details on schema structure.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Schema ID can not be determined using Type ID as objects of the same type (and thus, having the same Type ID) can have a multiple schemas, i.e. field sequence.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Schema ID calculation algorithm can be found below:</p>
</div>
<code-tabs><code-tab data-tab='Java'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="cm">/** FNV1 hash offset basis. */</span>
<span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">int</span> <span class="no">FNV1_OFFSET_BASIS</span> <span class="o">=</span> <span class="mh">0x811C9DC5</span><span class="o">;</span>
<span class="cm">/** FNV1 hash prime. */</span>
<span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">int</span> <span class="no">FNV1_PRIME</span> <span class="o">=</span> <span class="mh">0x01000193</span><span class="o">;</span>
<span class="kd">static</span> <span class="kt">int</span> <span class="nf">calculateSchemaId</span><span class="o">(</span><span class="kt">int</span> <span class="n">fieldIds</span><span class="o">[])</span>
<span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">fieldIds</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">||</span> <span class="n">fieldIds</span><span class="o">.</span><span class="na">length</span> <span class="o">==</span> <span class="mi">0</span><span class="o">)</span>
<span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
<span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="n">fieldIds</span><span class="o">.</span><span class="na">length</span><span class="o">;</span>
<span class="kt">int</span> <span class="n">schemaId</span> <span class="o">=</span> <span class="no">FNV1_OFFSET_BASIS</span><span class="o">;</span>
<span class="k">for</span> <span class="o">(</span><span class="n">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">len</span><span class="o">;</span> <span class="o">++</span><span class="n">i</span><span class="o">)</span>
<span class="o">{</span>
<span class="n">fieldId</span> <span class="o">=</span> <span class="n">fieldIds</span><span class="o">[</span><span class="n">i</span><span class="o">];</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">^</span> <span class="o">(</span><span class="n">fieldId</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="o">);</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">*</span> <span class="no">FNV1_PRIME</span><span class="o">;</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">^</span> <span class="o">((</span><span class="n">fieldId</span> <span class="o">&gt;&gt;</span> <span class="mi">8</span><span class="o">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="o">);</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">*</span> <span class="no">FNV1_PRIME</span><span class="o">;</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">^</span> <span class="o">((</span><span class="n">fieldId</span> <span class="o">&gt;&gt;</span> <span class="mi">16</span><span class="o">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="o">);</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">*</span> <span class="no">FNV1_PRIME</span><span class="o">;</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">^</span> <span class="o">((</span><span class="n">fieldId</span> <span class="o">&gt;&gt;</span> <span class="mi">24</span><span class="o">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="o">);</span>
<span class="n">schemaId</span> <span class="o">=</span> <span class="n">schemaId</span> <span class="o">*</span> <span class="no">FNV1_PRIME</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='C'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="c"><span class="cm">/** FNV1 hash offset basis. */</span>
<span class="k">enum</span> <span class="p">{</span> <span class="n">FNV1_OFFSET_BASIS</span> <span class="o">=</span> <span class="mh">0x811C9DC5</span> <span class="p">};</span>
<span class="cm">/** FNV1 hash prime. */</span>
<span class="k">enum</span> <span class="p">{</span> <span class="n">FNV1_PRIME</span> <span class="o">=</span> <span class="mh">0x01000193</span> <span class="p">};</span>
<span class="kt">int32_t</span> <span class="nf">CalculateSchemaId</span><span class="p">(</span><span class="k">const</span> <span class="kt">int32_t</span><span class="o">*</span> <span class="n">fieldIds</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">num</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">fieldIds</span> <span class="o">||</span> <span class="n">num</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="kt">int32_t</span> <span class="n">schemaId</span> <span class="o">=</span> <span class="n">FNV1_OFFSET_BASIS</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">num</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">fieldId</span> <span class="o">=</span> <span class="n">fieldIds</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="n">schemaId</span> <span class="o">^=</span> <span class="n">fieldId</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="p">;</span>
<span class="n">schemaId</span> <span class="o">*=</span> <span class="n">FNV1_PRIME</span><span class="p">;</span>
<span class="n">schemaId</span> <span class="o">^=</span> <span class="p">(</span><span class="n">fieldId</span> <span class="o">&gt;&gt;</span> <span class="mi">8</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="p">;</span>
<span class="n">schemaId</span> <span class="o">*=</span> <span class="n">FNV1_PRIME</span><span class="p">;</span>
<span class="n">schemaId</span> <span class="o">^=</span> <span class="p">(</span><span class="n">fieldId</span> <span class="o">&gt;&gt;</span> <span class="mi">16</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="p">;</span>
<span class="n">schemaId</span> <span class="o">*=</span> <span class="n">FNV1_PRIME</span><span class="p">;</span>
<span class="n">schemaId</span> <span class="o">^=</span> <span class="p">(</span><span class="n">fieldId</span> <span class="o">&gt;&gt;</span> <span class="mi">24</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mh">0xFF</span><span class="p">;</span>
<span class="n">schemaId</span> <span class="o">*=</span> <span class="n">FNV1_PRIME</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span></code></pre>
</div>
</div></code-tab></code-tabs>
</div>
</div>
<div class="sect1">
<h2 id="object-fields">Object Fields</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Object fields. Every field is a binary object and could be either complex or standard type. Note that a complex object that has no fields at all is a valid object and may be encountered. Every field can have or not have a name. For named fields there is an offset written in the object schema, by which they can be located in object without de-serialization of the whole object. Fields without name are always stored after the named fields and are written in a so called "raw mode".</p>
</div>
<div class="paragraph">
<p>Thus, fields that have been written in a raw mode can only be accessed by sequential read in the same order as they were written, while named fields can be read in a random order.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="schema">Schema</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Object schema. Any complex object may have or have no schema, so this field is optional. Schema is not present in object, if there is no named fields in object. It also includes cases, when the object does not have fields at all. You should check the HAS_SCHEMA object flag to determine if the object has schema.</p>
</div>
<div class="paragraph">
<p>The main purpose of a schema is to allow for fast search of object fields. For this purpose, schema contains a sequence of offsets of object fields in the object payload. Field offsets themselves can be of a different size. The size of these fields determined on a write by a max offset value. If it is in the range of [24..255] bytes, then 1-byte offset is used, if it&#8217;s in the range of [256..65535] bytes, then 2-byte offset is used. In all other cases 4-byte offsets are used. To determine the size of the offsets on read, clients should check <code>OFFSET_ONE_BYTE</code> and <code>OFFSET_TWO_BYTES</code> flags. If the <code>OFFSET_ONE_BYTE</code> flag is set, then offsets are 1 byte long, else if <code>OFFSET_TWO_BYTES</code> flag is set, then offsets are 2-byte long, otherwise offsets are 4-byte long.</p>
</div>
<div class="paragraph">
<p>There are two formats of schema supported:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Full schema approach - simpler to implement but uses more resources.</p>
</li>
<li>
<p>Compact footer approach - harder to implement, but provides better performance and reduces memory consumption; thus it is recommended for new clients to implement this approach.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>You can find more details on both formats below.</p>
</div>
<div class="paragraph">
<p>Note that the flag COMPACT_FOOTER should be checked by clients to determine which approach is used in every specific object.</p>
</div>
<div class="sect2">
<h3 id="full-schema-approach">Full schema approach</h3>
<div class="paragraph">
<p>When this approach is used, COMPACT_FOOTER flag is not set and the whole object schema is written to the footer of the object. In this case only complex object itself is needed for a de-serialization - schema_id field is ignored and no additional data is required. The structure of the schema field of the complex object in this case can be found below:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_id_0</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ID of the field with the index 0. 4-byte long hash stored in little-endian. The Field ID calculated using field name the same way it is done for a <a href="#type-id">Type ID</a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_offset_0</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable, depending on the size of the object: 1, 2 or 4.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unsigned integer number stored in little-endian Offset of the field in object, starting from the very first byte of the full object value (i.e. type_code position).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_id_1</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4-byte long hash stored in little-endian. ID of the field with the index 1.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_offset_1</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable, depending on the size of the object: 1, 2 or 4.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unsigned integer number stored in little-endian. Offset of the field in object.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_id_N</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4-byte long hash stored in little-endian. ID of the field with the index N.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_offset_N</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable, depending on the size of the object: 1, 2 or 4.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unsigned integer number stored in little-endian. Offset of the field in object.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="compact-footer-approach">Compact footer approach</h3>
<div class="paragraph">
<p>In this approach, COMPACT_FOOTER flag is set and only field offset sequence is written to the object footer. In this case client uses schema_id field to search objects schema in a previously stored meta store to find out fields order and associate field with its offset.</p>
</div>
<div class="paragraph">
<p>If this approach is used, client needs to keep schemas in a special meta store and send/retrieve them to Ignite servers. See <a href="/docs/2.9.0/check">Binary Types</a> for details.</p>
</div>
<div class="paragraph">
<p>The structure of the schema in this case can be found below:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size in bytes</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_offset_0</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable, depending on the size of the object: 1, 2 or 4.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unsigned integer number stored in little-endian. Offset of the field 0 in the object, starting from the very first byte of the full object value (i.e. type_code position).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_offset_1</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable, depending on the size of the object: 1, 2 or 4.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unsigned integer number stored in little-endian. Offset of the 1-st field in object.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>field_id_N</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Variable, depending on the size of the object: 1, 2 or 4.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unsigned integer number stored in little-endian.
Offset of the N-th field in object.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="raw-data-offset">Raw data offset</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Optional field. Only present in object, if there is any fields, that have been written in a raw mode. In this case, HAS_RAW_DATA flag is set and the raw data offset field is present and is stored as an 4-byte long little-endian value, which points to the offset of the raw data in complex object, starting from the very first byte of the header (i.e. this field always greater than a header length).</p>
</div>
<div class="paragraph">
<p>This field is used to position stream for user to start reading in a raw mode.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="special-types">Special types</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="wrapped-data">Wrapped Data</h3>
<div class="paragraph">
<p>Type code: 27;</p>
</div>
<div class="paragraph">
<p>One or more binary objects can be wrapped in an array. This allows reading, storing, passing and writing objects efficiently without understanding their contents, performing simple byte copy.
All cache operations return complex objects inside a wrapper (but not primitives).</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number stored in little-endian. Size of the wrapped data in bytes.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">payload</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">length</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Payload.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">offset</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number stored in little-endian. Offset of the object within an array. Array can contain an object graph, this offset points to the root object.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="binary-enum">Binary enum</h3>
<div class="paragraph">
<p>Type code: 38</p>
</div>
<div class="paragraph">
<p>Wrapped enumerable type. This type can be returned by the engine in place of the ordinary enum type. Enums should be written in this form when Binary API is used.</p>
</div>
<div class="paragraph">
<p>Structure:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 66.6668%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Field</th>
<th class="tableblock halign-left valign-top">Size</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">type_id</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number in little-endian. See <a href="#type-id">Type ID</a> for details.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ordinal</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Signed integer number stored in little-endian. Enumeration value ordinal . Its position in its enum declaration, where the initial constant is assigned an ordinal of zero.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="serialization-and-deserialization-examples">Serialization and Deserialization examples</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="reading-objects">Reading objects</h3>
<div class="paragraph">
<p>A code template below shows how to read data of various types from an input byte stream:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="kd">private</span> <span class="kd">static</span> <span class="nc">Object</span> <span class="nf">readDataObject</span><span class="o">(</span><span class="nc">DataInputStream</span> <span class="n">in</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">IOException</span> <span class="o">{</span>
<span class="kt">byte</span> <span class="n">code</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">readByte</span><span class="o">();</span>
<span class="k">switch</span> <span class="o">(</span><span class="n">code</span><span class="o">)</span> <span class="o">{</span>
<span class="k">case</span> <span class="mi">1</span><span class="o">:</span>
<span class="k">return</span> <span class="n">in</span><span class="o">.</span><span class="na">readByte</span><span class="o">();</span>
<span class="k">case</span> <span class="mi">2</span><span class="o">:</span>
<span class="k">return</span> <span class="nf">readShortLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="k">case</span> <span class="mi">3</span><span class="o">:</span>
<span class="k">return</span> <span class="nf">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="k">case</span> <span class="mi">4</span><span class="o">:</span>
<span class="k">return</span> <span class="nf">readLongLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="k">case</span> <span class="mi">27</span><span class="o">:</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="c1">// Assume 0 offset for simplicity</span>
<span class="nc">Object</span> <span class="n">res</span> <span class="o">=</span> <span class="n">readDataObject</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">offset</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="k">return</span> <span class="n">res</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">case</span> <span class="mi">103</span><span class="o">:</span>
<span class="kt">byte</span> <span class="n">ver</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">readByte</span><span class="o">();</span>
<span class="k">assert</span> <span class="n">ver</span> <span class="o">==</span> <span class="mi">1</span><span class="o">;</span> <span class="c1">// version</span>
<span class="kt">short</span> <span class="n">flags</span> <span class="o">=</span> <span class="n">readShortLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">typeId</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">hash</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">schemaId</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">schemaOffset</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">byte</span><span class="o">[]</span> <span class="n">data</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[</span><span class="n">len</span> <span class="o">-</span> <span class="mi">24</span><span class="o">];</span>
<span class="n">in</span><span class="o">.</span><span class="na">read</span><span class="o">(</span><span class="n">data</span><span class="o">);</span>
<span class="k">return</span> <span class="s">"Binary Object: "</span> <span class="o">+</span> <span class="n">typeId</span><span class="o">;</span>
<span class="k">default</span><span class="o">:</span>
<span class="k">throw</span> <span class="k">new</span> <span class="nf">Error</span><span class="o">(</span><span class="s">"Unsupported type: "</span> <span class="o">+</span> <span class="n">code</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="int-2">Int</h3>
<div class="paragraph">
<p>The following code snippet shows how to write and read a data object of type int, using a socket based output/input stream.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Write int data object</span>
<span class="nc">DataOutputStream</span> <span class="n">out</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">DataOutputStream</span><span class="o">(</span><span class="n">socket</span><span class="o">.</span><span class="na">getOutputStream</span><span class="o">());</span>
<span class="kt">int</span> <span class="n">val</span> <span class="o">=</span> <span class="mi">11</span><span class="o">;</span>
<span class="n">writeByteLittleEndian</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="n">out</span><span class="o">);</span> <span class="c1">// Integer type code</span>
<span class="n">writeIntLittleEndian</span><span class="o">(</span><span class="n">val</span><span class="o">,</span> <span class="n">out</span><span class="o">);</span>
<span class="c1">// Read int data object</span>
<span class="nc">DataInputStream</span> <span class="n">in</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">DataInputStream</span><span class="o">(</span><span class="n">socket</span><span class="o">.</span><span class="na">getInputStream</span><span class="o">());</span>
<span class="kt">int</span> <span class="n">typeCode</span> <span class="o">=</span> <span class="n">readByteLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">val</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Refer to the <a href="/docs/2.9.0/example">example section</a> for implementation of <code>write&#8230;&#8203;()</code> and <code>read..()</code> methods shown above.</p>
</div>
<div class="paragraph">
<p>As another example, for String type, the structure would be:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 66.6667%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">byte</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">String type code, 9.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">String length in UTF-8 bytes.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">bytes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Actual string.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="string-2">String</h3>
<div class="paragraph">
<p>The code snippet below shows how to write and read a String value following this format:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="kd">private</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">writeString</span> <span class="o">(</span><span class="nc">String</span> <span class="n">str</span><span class="o">,</span> <span class="nc">DataOutputStream</span> <span class="n">out</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">IOException</span> <span class="o">{</span>
<span class="n">writeByteLittleEndian</span><span class="o">(</span><span class="mi">9</span><span class="o">,</span> <span class="n">out</span><span class="o">);</span> <span class="c1">// type code for String</span>
<span class="kt">int</span> <span class="n">strLen</span> <span class="o">=</span> <span class="n">str</span><span class="o">.</span><span class="na">getBytes</span><span class="o">(</span><span class="s">"UTF-8"</span><span class="o">).</span><span class="na">length</span><span class="o">;</span> <span class="c1">// length of the string</span>
<span class="n">writeIntLittleEndian</span><span class="o">(</span><span class="n">strLen</span><span class="o">,</span> <span class="n">out</span><span class="o">);</span>
<span class="n">out</span><span class="o">.</span><span class="na">writeBytes</span><span class="o">(</span><span class="n">str</span><span class="o">);</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="kd">static</span> <span class="nc">String</span> <span class="nf">readString</span><span class="o">(</span><span class="nc">DataInputStream</span> <span class="n">in</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">IOException</span> <span class="o">{</span>
<span class="kt">int</span> <span class="n">type</span> <span class="o">=</span> <span class="n">readByteLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span> <span class="c1">// type code</span>
<span class="kt">int</span> <span class="n">strLen</span> <span class="o">=</span> <span class="n">readIntLittleEndian</span><span class="o">(</span><span class="n">in</span><span class="o">);</span> <span class="c1">// length of the string</span>
<span class="kt">byte</span><span class="o">[]</span> <span class="n">buf</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[</span><span class="n">strLen</span><span class="o">];</span>
<span class="n">readFully</span><span class="o">(</span><span class="n">in</span><span class="o">,</span> <span class="n">buf</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">strLen</span><span class="o">);</span>
<span class="k">return</span> <span class="k">new</span> <span class="nf">String</span><span class="o">(</span><span class="n">buf</span><span class="o">);</span>
<span class="o">}</span></code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="copyright">
© 2020 The Apache Software Foundation.<br/>
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.
</div>
</article>
<nav class="right-nav" data-swiftype-index='false'>
<ul class="sectlevel1">
<li><a href="#primitives">Primitives</a>
<ul class="sectlevel2">
<li><a href="#byte">Byte</a></li>
<li><a href="#short">Short</a></li>
<li><a href="#int">Int</a></li>
<li><a href="#long">Long</a></li>
<li><a href="#float">Float</a></li>
<li><a href="#double">Double</a></li>
<li><a href="#char">Char</a></li>
<li><a href="#bool">Bool</a></li>
<li><a href="#null">NULL</a></li>
</ul>
</li>
<li><a href="#standard-objects">Standard objects</a>
<ul class="sectlevel2">
<li><a href="#string">String</a></li>
<li><a href="#uuid-guid">UUID (Guid)</a></li>
<li><a href="#timestamp">Timestamp</a></li>
<li><a href="#date">Date</a></li>
<li><a href="#time">Time</a></li>
<li><a href="#decimal">Decimal</a></li>
<li><a href="#enum">Enum</a></li>
</ul>
</li>
<li><a href="#arrays-of-primitives">Arrays of primitives</a>
<ul class="sectlevel2">
<li><a href="#byte-array">Byte array</a></li>
<li><a href="#int-array">Int array</a></li>
<li><a href="#long-array">Long array</a></li>
<li><a href="#float-array">Float array</a></li>
<li><a href="#double-array">Double array</a></li>
<li><a href="#char-array">Char array</a></li>
<li><a href="#bool-array">Bool array</a></li>
</ul>
</li>
<li><a href="#arrays-of-standard-objects">Arrays of standard objects</a>
<ul class="sectlevel2">
<li><a href="#string-array">String array</a></li>
<li><a href="#uuid-guid-array">UUID (Guid) array</a></li>
<li><a href="#timestamp-array">Timestamp array</a></li>
<li><a href="#date-array">Date array</a></li>
<li><a href="#time-array">Time array</a></li>
<li><a href="#decimal-array">Decimal array</a></li>
</ul>
</li>
<li><a href="#object-collections">Object collections</a>
<ul class="sectlevel2">
<li><a href="#object-array">Object array</a></li>
<li><a href="#collection">Collection</a></li>
<li><a href="#map">Map</a></li>
<li><a href="#enum-array">Enum array</a></li>
</ul>
</li>
<li><a href="#complex-object">Complex object</a></li>
<li><a href="#version">Version</a></li>
<li><a href="#flags">Flags</a></li>
<li><a href="#type-id">Type ID</a></li>
<li><a href="#hash-code">Hash code</a></li>
<li><a href="#length">Length</a></li>
<li><a href="#schema-id">Schema ID</a></li>
<li><a href="#object-fields">Object Fields</a></li>
<li><a href="#schema">Schema</a>
<ul class="sectlevel2">
<li><a href="#full-schema-approach">Full schema approach</a></li>
<li><a href="#compact-footer-approach">Compact footer approach</a></li>
</ul>
</li>
<li><a href="#raw-data-offset">Raw data offset</a></li>
<li><a href="#special-types">Special types</a>
<ul class="sectlevel2">
<li><a href="#wrapped-data">Wrapped Data</a></li>
<li><a href="#binary-enum">Binary enum</a></li>
</ul>
</li>
<li><a href="#serialization-and-deserialization-examples">Serialization and Deserialization examples</a>
<ul class="sectlevel2">
<li><a href="#reading-objects">Reading objects</a></li>
<li><a href="#int-2">Int</a></li>
<li><a href="#string-2">String</a></li>
</ul>
</li>
</ul>
<footer>
</footer>
</nav>
</section>
<script type='module' src='/assets/js/code-copy-to-clipboard.js' async crossorigin></script>
<script>
// inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late
anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5');
anchors.options = {
placement: 'right',
visible: 'always'
};
</script>
<!-- load google fonts async -->
<script type="text/javascript">
WebFontConfig = {
google: { families: [ 'Open+Sans:300,400,600,700&display=swap' ] }
};
(function() {
var wf = document.createElement('script');
wf.src = 'https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
wf.type = 'text/javascript';
wf.async = 'true';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(wf, s);
})(); </script>
<script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
<script>
docsearch({
// Your apiKey and indexName will be given to you once
// we create your config
apiKey: '3eee686c0ebe39eff3baeb18c56fa5f8',
indexName: 'apache_ignite',
// Replace inputSelector with a CSS selector
// matching your search input
inputSelector: '#search-input',
// algoliaOptions: { 'facetFilters': ["version:$VERSION"] },
// Set debug to true to inspect the dropdown
debug: false,
});
</script>
<script type='module' src='/assets/js/index.js?1609302779' async crossorigin></script>
<script type='module' src='/assets/js/versioning.js?1609302779' async crossorigin></script>
</body>
</html>