This is an automated email from the ASF dual-hosted git repository.
pandalee pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory.git
The following commit(s) were added to refs/heads/main by this push:
new c31f9707 docs: format markdown docs (#2354)
c31f9707 is described below
commit c31f97073cf6c49e92a5347e86ba1e511a2590ba
Author: Shawn Yang <[email protected]>
AuthorDate: Wed Jun 18 23:56:59 2025 +0800
docs: format markdown docs (#2354)
## What does this PR do?
<!-- Describe the purpose of this PR. -->
## Related issues
<!--
Is there any related issue? Please attach here.
- #xxxx0
- #xxxx1
- #xxxx2
-->
## Does this PR introduce any user-facing change?
<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/fory/issues/new/choose) describing the
need to do so and update the document if necessary.
-->
- [ ] Does this PR introduce any public API change?
- [ ] Does this PR introduce any binary protocol compatibility change?
## Benchmark
<!--
When the PR has an impact on performance (if you don't know whether the
PR will have an impact on performance, you can submit the PR first, and
if it will have impact on performance, the code reviewer will explain
it), be sure to attach a benchmark data here.
-->
---
.github/workflows/ci.yml | 4 +
README.md | 4 +-
ci/format.sh | 4 +
dart/README.md | 58 +-
dart/packages/fory-test/README.md | 1 -
dart/packages/fory/README.md | 58 +-
docs/benchmarks/README.md | 765 +++++++++++++------------
docs/cpp_debug.md | 2 +-
docs/guide/graalvm_guide.md | 2 +-
docs/guide/java_serialization_guide.md | 20 +-
docs/guide/row_format_guide.md | 12 +-
docs/guide/xlang_serialization_guide.md | 24 +-
docs/guide/xlang_type_mapping.md | 28 +-
docs/specification/java_serialization_spec.md | 74 +--
docs/specification/xlang_serialization_spec.md | 66 ++-
15 files changed, 564 insertions(+), 558 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4ea3717c..a8bd1a9a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -327,5 +327,9 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: 3.8
+ - name: Use Node.js 20.x
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20.x
- name: Check code style
run: ./ci/run_ci.sh format
diff --git a/README.md b/README.md
index 0bbd94e3..2b2a1694 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@
In addition to cross-language serialization, Fory also features at:
- Drop-in replace Java serialization frameworks such as JDK/Kryo/Hessian, but
100x faster at most, which can greatly improve
- the efficiency of high-performance RPC calls, data transfer, and object
persistence.
+ the efficiency of high-performance RPC calls, data transfer, and object
persistence.
- **100% compatible** with JDK serialization API with much faster
implementation: supporting JDK
`writeObject`/`readObject`/`writeReplace`/`readResolve`/`readObjectNoData`/`Externalizable`
API.
- Supports **Java 8~21**, Java 17+ `record` is supported too.
- Supports [AOT compilation serialization](docs/guide/graalvm_guide.md) for
**GraalVM native image**, and no reflection/serialization json config are
needed.
@@ -417,7 +417,7 @@ Static serialization is relatively secure. But dynamic
serialization such as For
For example, the deserialization may invoke `init` constructor or
`equals`/`hashCode` method, if the method body contains malicious code, the
system will be at risk.
Fory provides a class registration option that is enabled by default for such
protocols, allowing only deserialization of trusted registered types or
built-in types.
- **Do not disable class registration unless you can ensure your environment is
secure**.
+**Do not disable class registration unless you can ensure your environment is
secure**.
If this option is disabled, you are responsible for serialization security.
You can configure `org.apache.fory.resolver.ClassChecker` by
`ClassResolver#setClassChecker` to control which classes are allowed for
serialization.
diff --git a/ci/format.sh b/ci/format.sh
index 1be740c8..b66652bd 100755
--- a/ci/format.sh
+++ b/ci/format.sh
@@ -281,6 +281,10 @@ format_changed() {
git diff --name-only --diff-filter=ACRM "$MERGEBASE" -- '*.ts' |
xargs -P 5 \
node ./javascript/node_modules/.bin/eslint
fi
+ # Install prettier globally
+ npm install -g prettier
+ # Fix markdown files
+ prettier --write "**/*.md"
popd
fi
}
diff --git a/dart/README.md b/dart/README.md
index 8d694134..2e68b749 100644
--- a/dart/README.md
+++ b/dart/README.md
@@ -93,35 +93,35 @@ fory.register($EnumFoo, "example.EnumFoo");
Fory Dart currently supports the following type mappings in XLANG mode:
-| Fory Type | Dart Type
|
-|----------------------------|------------------------------------------------|
-| bool | bool
|
-| int8 | fory.Int8
|
-| int16 | fory.Int16
|
-| int32 | fory.Int32
|
-| var_int32 | fory.Int32
|
-| int64 | int
|
-| var_int64 | int
|
-| sli_int64 | int
|
-| float32 | fory.Float32
|
-| float64 | double
|
-| string | String
|
-| enum | Enum
|
-| named_enum | Enum
|
-| named_struct | class
|
-| list | List
|
-| set | Set (LinkedHashSet, HashSet, SplayTreeSet)
|
-| map | Map (LinkedHashMap, HashMap, SplayTreeMap)
|
-| timestamp | fory.TimeStamp
|
-| local_date | fory.LocalDate
|
-| binary | Uint8List
|
-| bool_array | BoolList
|
-| int8_array | Int8List
|
-| int16_array | Int16List
|
-| int32_array | Int32List
|
-| int64_array | Int64List
|
-| float32_array | Float32List
|
-| float64_array | Float64List
|
+| Fory Type | Dart Type |
+| ------------- | ------------------------------------------ |
+| bool | bool |
+| int8 | fory.Int8 |
+| int16 | fory.Int16 |
+| int32 | fory.Int32 |
+| var_int32 | fory.Int32 |
+| int64 | int |
+| var_int64 | int |
+| sli_int64 | int |
+| float32 | fory.Float32 |
+| float64 | double |
+| string | String |
+| enum | Enum |
+| named_enum | Enum |
+| named_struct | class |
+| list | List |
+| set | Set (LinkedHashSet, HashSet, SplayTreeSet) |
+| map | Map (LinkedHashMap, HashMap, SplayTreeMap) |
+| timestamp | fory.TimeStamp |
+| local_date | fory.LocalDate |
+| binary | Uint8List |
+| bool_array | BoolList |
+| int8_array | Int8List |
+| int16_array | Int16List |
+| int32_array | Int32List |
+| int64_array | Int64List |
+| float32_array | Float32List |
+| float64_array | Float64List |
## Project Structure
diff --git a/dart/packages/fory-test/README.md
b/dart/packages/fory-test/README.md
index 50be5150..3a6ef0b2 100644
--- a/dart/packages/fory-test/README.md
+++ b/dart/packages/fory-test/README.md
@@ -1,4 +1,3 @@
-
## Testing Approach
The test suite is inspired by Fory Java's testing approach and includes:
diff --git a/dart/packages/fory/README.md b/dart/packages/fory/README.md
index 265a6615..bcada499 100644
--- a/dart/packages/fory/README.md
+++ b/dart/packages/fory/README.md
@@ -93,35 +93,35 @@ fory.register($EnumFoo, "example.EnumFoo");
Fory Dart currently supports the following type mappings in XLANG mode:
-| Fory Type | Dart Type
|
-|----------------------------|------------------------------------------------|
-| bool | bool
|
-| int8 | fory.Int8
|
-| int16 | fory.Int16
|
-| int32 | fory.Int32
|
-| var_int32 | fory.Int32
|
-| int64 | int
|
-| var_int64 | int
|
-| sli_int64 | int
|
-| float32 | fory.Float32
|
-| float64 | double
|
-| string | String
|
-| enum | Enum
|
-| named_enum | Enum
|
-| named_struct | class
|
-| list | List
|
-| set | Set (LinkedHashSet, HashSet, SplayTreeSet)
|
-| map | Map (LinkedHashMap, HashMap, SplayTreeMap)
|
-| timestamp | fory.TimeStamp
|
-| local_date | fory.LocalDate
|
-| binary | Uint8List
|
-| bool_array | BoolList
|
-| int8_array | Int8List
|
-| int16_array | Int16List
|
-| int32_array | Int32List
|
-| int64_array | Int64List
|
-| float32_array | Float32List
|
-| float64_array | Float64List
|
+| Fory Type | Dart Type |
+| ------------- | ------------------------------------------ |
+| bool | bool |
+| int8 | fory.Int8 |
+| int16 | fory.Int16 |
+| int32 | fory.Int32 |
+| var_int32 | fory.Int32 |
+| int64 | int |
+| var_int64 | int |
+| sli_int64 | int |
+| float32 | fory.Float32 |
+| float64 | double |
+| string | String |
+| enum | Enum |
+| named_enum | Enum |
+| named_struct | class |
+| list | List |
+| set | Set (LinkedHashSet, HashSet, SplayTreeSet) |
+| map | Map (LinkedHashMap, HashMap, SplayTreeMap) |
+| timestamp | fory.TimeStamp |
+| local_date | fory.LocalDate |
+| binary | Uint8List |
+| bool_array | BoolList |
+| int8_array | Int8List |
+| int16_array | Int16List |
+| int32_array | Int32List |
+| int64_array | Int64List |
+| float32_array | Float32List |
+| float64_array | Float64List |
## Project Structure
diff --git a/docs/benchmarks/README.md b/docs/benchmarks/README.md
index adfc52bd..5961c714 100644
--- a/docs/benchmarks/README.md
+++ b/docs/benchmarks/README.md
@@ -104,6 +104,7 @@ No class forward/backward compatibility are supported in
this mode.
The deserialization peer can have different class definition with the
serialization peer.
Class forward/backward compatibility are supported in this mode.
+
<p align="center">
<img width="24%" alt=""
src="deserialization/bench_deserialize_compatible_STRUCT_from_array_tps.png">
<img width="24%" alt=""
src="deserialization/bench_deserialize_compatible_STRUCT2_from_array_tps.png">
@@ -119,6 +120,7 @@ Serialize data off-heap memory.
The deserialization peer must have same class definition with the
serialization peer.
No class forward/backward compatibility are supported in this mode.
+
<p align="center">
<img width="24%" alt=""
src="serialization/bench_serialize_STRUCT_to_directBuffer_tps.png">
<img width="24%" alt=""
src="serialization/bench_serialize_STRUCT2_to_directBuffer_tps.png">
@@ -130,6 +132,7 @@ No class forward/backward compatibility are supported in
this mode.
The deserialization peer can have different class definition with the
serialization peer.
Class forward/backward compatibility are supported in this mode.
+
<p align="center">
<img width="24%" alt=""
src="serialization/bench_serialize_compatible_STRUCT_to_directBuffer_tps.png">
<img width="24%" alt=""
src="serialization/bench_serialize_compatible_STRUCT2_to_directBuffer_tps.png">
@@ -141,6 +144,7 @@ Class forward/backward compatibility are supported in this
mode.
The deserialization peer must have same class definition with the
serialization peer.
No class forward/backward compatibility are supported in this mode.
+
<p align="center">
<img width="24%" alt=""
src="deserialization/bench_deserialize_STRUCT_from_directBuffer_tps.png">
<img width="24%" alt=""
src="deserialization/bench_deserialize_STRUCT2_from_directBuffer_tps.png">
@@ -152,6 +156,7 @@ No class forward/backward compatibility are supported in
this mode.
The deserialization peer can have different class definition with the
serialization peer.
Class forward/backward compatibility are supported in this mode.
+
<p align="center">
<img width="24%" alt=""
src="deserialization/bench_deserialize_compatible_STRUCT_from_directBuffer_tps.png">
<img width="24%" alt=""
src="deserialization/bench_deserialize_compatible_STRUCT2_from_directBuffer_tps.png">
@@ -187,386 +192,386 @@ But if you serialize data between processes on same
node and use shared-memory,
### Java Serialization
-| Lib | Benchmark | bufferType | objectType | references | Tps |
-| ------- | ------- | ------- | ------- | ------- | ------- |
-| Fst | serialize | array | SAMPLE | False | 915907.574306 |
-| Fst | serialize | array | SAMPLE | True | 731869.156376 |
-| Fst | serialize | array | MEDIA_CONTENT | False | 751892.023189 |
-| Fst | serialize | array | MEDIA_CONTENT | True | 583859.907758 |
-| Fst | serialize | array | STRUCT | False | 882178.995727 |
-| Fst | serialize | array | STRUCT | True | 757753.756691 |
-| Fst | serialize | array | STRUCT2 | False | 371762.982661 |
-| Fst | serialize | array | STRUCT2 | True | 380638.700267 |
-| Fst | serialize | directBuffer | SAMPLE | False | 902302.261168 |
-| Fst | serialize | directBuffer | SAMPLE | True | 723614.06677 |
-| Fst | serialize | directBuffer | MEDIA_CONTENT | False | 728001.08025 |
-| Fst | serialize | directBuffer | MEDIA_CONTENT | True | 595679.580108 |
-| Fst | serialize | directBuffer | STRUCT | False | 807847.663261 |
-| Fst | serialize | directBuffer | STRUCT | True | 762088.935404 |
-| Fst | serialize | directBuffer | STRUCT2 | False | 365317.705376 |
-| Fst | serialize | directBuffer | STRUCT2 | True | 370851.880711 |
-| Fory | serialize | array | SAMPLE | False | 3570966.469087 |
-| Fory | serialize | array | SAMPLE | True | 1767693.83509 |
-| Fory | serialize | array | MEDIA_CONTENT | False | 3031642.924542 |
-| Fory | serialize | array | MEDIA_CONTENT | True | 2450384.600246 |
-| Fory | serialize | array | STRUCT | False | 7501415.56726 |
-| Fory | serialize | array | STRUCT | True | 6264439.154428 |
-| Fory | serialize | array | STRUCT2 | False | 3586126.623874 |
-| Fory | serialize | array | STRUCT2 | True | 3306474.506382 |
-| Fory | serialize | directBuffer | SAMPLE | False | 3684487.760591 |
-| Fory | serialize | directBuffer | SAMPLE | True | 1826456.709478 |
-| Fory | serialize | directBuffer | MEDIA_CONTENT | False | 2479862.129632 |
-| Fory | serialize | directBuffer | MEDIA_CONTENT | True | 1938527.588331 |
-| Fory | serialize | directBuffer | STRUCT | False | 9834243.243204 |
-| Fory | serialize | directBuffer | STRUCT | True | 7551780.823133 |
-| Fory | serialize | directBuffer | STRUCT2 | False | 2643155.135327 |
-| Fory | serialize | directBuffer | STRUCT2 | True | 2391110.083108 |
-| Fory | serialize_compatible | array | SAMPLE | False | 3604596.465625 |
-| Fory | serialize_compatible | array | SAMPLE | True | 1619648.337293 |
-| Fory | serialize_compatible | array | MEDIA_CONTENT | False | 1679272.036243
|
-| Fory | serialize_compatible | array | MEDIA_CONTENT | True | 1406736.538716 |
-| Fory | serialize_compatible | array | STRUCT | False | 3530406.108869 |
-| Fory | serialize_compatible | array | STRUCT | True | 3293059.098127 |
-| Fory | serialize_compatible | array | STRUCT2 | False | 2773368.99768 |
-| Fory | serialize_compatible | array | STRUCT2 | True | 2564174.550276 |
-| Fory | serialize_compatible | directBuffer | SAMPLE | False | 3484533.218305
|
-| Fory | serialize_compatible | directBuffer | SAMPLE | True | 1730824.630648 |
-| Fory | serialize_compatible | directBuffer | MEDIA_CONTENT | False |
1710680.937387 |
-| Fory | serialize_compatible | directBuffer | MEDIA_CONTENT | True |
1149999.473994 |
-| Fory | serialize_compatible | directBuffer | STRUCT | False | 2653169.568374
|
-| Fory | serialize_compatible | directBuffer | STRUCT | True | 2393817.762938 |
-| Fory | serialize_compatible | directBuffer | STRUCT2 | False |
1912402.937879 |
-| Fory | serialize_compatible | directBuffer | STRUCT2 | True | 1848338.968058
|
-| Forymetashared | serialize_compatible | array | SAMPLE | False |
4409055.687063 |
-| Forymetashared | serialize_compatible | array | SAMPLE | True |
1840705.439334 |
-| Forymetashared | serialize_compatible | array | MEDIA_CONTENT | False |
2992488.235281 |
-| Forymetashared | serialize_compatible | array | MEDIA_CONTENT | True |
2058738.716953 |
-| Forymetashared | serialize_compatible | array | STRUCT | False |
9204444.777172 |
-| Forymetashared | serialize_compatible | array | STRUCT | True |
7064625.291374 |
-| Forymetashared | serialize_compatible | array | STRUCT2 | False |
2575824.143864 |
-| Forymetashared | serialize_compatible | array | STRUCT2 | True |
3543082.528217 |
-| Forymetashared | serialize_compatible | directBuffer | SAMPLE | False |
5043538.364886 |
-| Forymetashared | serialize_compatible | directBuffer | SAMPLE | True |
1859289.705838 |
-| Forymetashared | serialize_compatible | directBuffer | MEDIA_CONTENT | False
| 2491443.556971 |
-| Forymetashared | serialize_compatible | directBuffer | MEDIA_CONTENT | True
| 1804349.244125 |
-| Forymetashared | serialize_compatible | directBuffer | STRUCT | False |
11650249.648715 |
-| Forymetashared | serialize_compatible | directBuffer | STRUCT | True |
8702412.752357 |
-| Forymetashared | serialize_compatible | directBuffer | STRUCT2 | False |
2714748.572448 |
-| Forymetashared | serialize_compatible | directBuffer | STRUCT2 | True |
1866073.031851 |
-| Hession | serialize | array | SAMPLE | False | 240386.502846 |
-| Hession | serialize | array | SAMPLE | True | 192414.014211 |
-| Hession | serialize | array | MEDIA_CONTENT | False | 367782.358049 |
-| Hession | serialize | array | MEDIA_CONTENT | True | 329427.47068 |
-| Hession | serialize | array | STRUCT | False | 258233.998931 |
-| Hession | serialize | array | STRUCT | True | 260845.209485 |
-| Hession | serialize | array | STRUCT2 | False | 56056.080075 |
-| Hession | serialize | array | STRUCT2 | True | 60038.87979 |
-| Hession | serialize | directBuffer | SAMPLE | False | 240981.308085 |
-| Hession | serialize | directBuffer | SAMPLE | True | 211949.960255 |
-| Hession | serialize | directBuffer | MEDIA_CONTENT | False | 372477.13815 |
-| Hession | serialize | directBuffer | MEDIA_CONTENT | True | 353376.085025 |
-| Hession | serialize | directBuffer | STRUCT | False | 266481.009245 |
-| Hession | serialize | directBuffer | STRUCT | True | 261762.594966 |
-| Hession | serialize | directBuffer | STRUCT2 | False | 55924.319442 |
-| Hession | serialize | directBuffer | STRUCT2 | True | 56674.065604 |
-| Hession | serialize_compatible | array | SAMPLE | False | 234454.975158 |
-| Hession | serialize_compatible | array | SAMPLE | True | 206174.173039 |
-| Hession | serialize_compatible | array | MEDIA_CONTENT | False |
377195.903772 |
-| Hession | serialize_compatible | array | MEDIA_CONTENT | True |
351657.879556 |
-| Hession | serialize_compatible | array | STRUCT | False | 258650.663523 |
-| Hession | serialize_compatible | array | STRUCT | True | 263564.913879 |
-| Hession | serialize_compatible | array | STRUCT2 | False | 58509.125342 |
-| Hession | serialize_compatible | array | STRUCT2 | True | 55552.977735 |
-| Hession | serialize_compatible | directBuffer | SAMPLE | False |
194761.244263 |
-| Hession | serialize_compatible | directBuffer | SAMPLE | True |
212840.483308 |
-| Hession | serialize_compatible | directBuffer | MEDIA_CONTENT | False |
371729.727192 |
-| Hession | serialize_compatible | directBuffer | MEDIA_CONTENT | True |
343834.954942 |
-| Hession | serialize_compatible | directBuffer | STRUCT | False |
249241.452137 |
-| Hession | serialize_compatible | directBuffer | STRUCT | True |
263623.143601 |
-| Hession | serialize_compatible | directBuffer | STRUCT2 | False |
58908.567439 |
-| Hession | serialize_compatible | directBuffer | STRUCT2 | True |
55524.373547 |
-| Jdk | serialize | array | SAMPLE | False | 118374.836631 |
-| Jdk | serialize | array | SAMPLE | True | 119858.140625 |
-| Jdk | serialize | array | MEDIA_CONTENT | False | 137989.198821 |
-| Jdk | serialize | array | MEDIA_CONTENT | True | 140260.668888 |
-| Jdk | serialize | array | STRUCT | False | 155908.24424 |
-| Jdk | serialize | array | STRUCT | True | 151258.539369 |
-| Jdk | serialize | array | STRUCT2 | False | 36846.049162 |
-| Jdk | serialize | array | STRUCT2 | True | 38183.705811 |
-| Jdk | serialize | directBuffer | SAMPLE | False | 118273.584257 |
-| Jdk | serialize | directBuffer | SAMPLE | True | 108263.040839 |
-| Jdk | serialize | directBuffer | MEDIA_CONTENT | False | 138567.623369 |
-| Jdk | serialize | directBuffer | MEDIA_CONTENT | True | 140158.67391 |
-| Jdk | serialize | directBuffer | STRUCT | False | 154875.908438 |
-| Jdk | serialize | directBuffer | STRUCT | True | 156404.686214 |
-| Jdk | serialize | directBuffer | STRUCT2 | False | 37444.967981 |
-| Jdk | serialize | directBuffer | STRUCT2 | True | 35798.679246 |
-| Kryo | serialize | array | SAMPLE | False | 1105365.931217 |
-| Kryo | serialize | array | SAMPLE | True | 734215.482491 |
-| Kryo | serialize | array | MEDIA_CONTENT | False | 730792.521676 |
-| Kryo | serialize | array | MEDIA_CONTENT | True | 445251.084327 |
-| Kryo | serialize | array | STRUCT | False | 558194.100861 |
-| Kryo | serialize | array | STRUCT | True | 557542.628765 |
-| Kryo | serialize | array | STRUCT2 | False | 325172.969175 |
-| Kryo | serialize | array | STRUCT2 | True | 259863.332448 |
-| Kryo | serialize | directBuffer | SAMPLE | False | 1376560.302168 |
-| Kryo | serialize | directBuffer | SAMPLE | True | 932887.968348 |
-| Kryo | serialize | directBuffer | MEDIA_CONTENT | False | 608972.51758 |
-| Kryo | serialize | directBuffer | MEDIA_CONTENT | True | 359875.473951 |
-| Kryo | serialize | directBuffer | STRUCT | False | 1078046.011115 |
-| Kryo | serialize | directBuffer | STRUCT | True | 853350.408656 |
-| Kryo | serialize | directBuffer | STRUCT2 | False | 355688.882786 |
-| Kryo | serialize | directBuffer | STRUCT2 | True | 338960.426033 |
-| Kryo | serialize_compatible | array | SAMPLE | False | 378907.663184 |
-| Kryo | serialize_compatible | array | SAMPLE | True | 320815.567701 |
-| Kryo | serialize_compatible | array | MEDIA_CONTENT | False | 188911.259146 |
-| Kryo | serialize_compatible | array | MEDIA_CONTENT | True | 145782.916427 |
-| Kryo | serialize_compatible | array | STRUCT | False | 145964.199559 |
-| Kryo | serialize_compatible | array | STRUCT | True | 136180.832879 |
-| Kryo | serialize_compatible | array | STRUCT2 | False | 125807.748004 |
-| Kryo | serialize_compatible | array | STRUCT2 | True | 114983.546343 |
-| Kryo | serialize_compatible | directBuffer | SAMPLE | False | 296102.615094 |
-| Kryo | serialize_compatible | directBuffer | SAMPLE | True | 276757.392449 |
-| Kryo | serialize_compatible | directBuffer | MEDIA_CONTENT | False |
185363.714829 |
-| Kryo | serialize_compatible | directBuffer | MEDIA_CONTENT | True |
142836.961878 |
-| Kryo | serialize_compatible | directBuffer | STRUCT | False | 106695.800245 |
-| Kryo | serialize_compatible | directBuffer | STRUCT | True | 106458.212005 |
-| Kryo | serialize_compatible | directBuffer | STRUCT2 | False | 92130.672361 |
-| Kryo | serialize_compatible | directBuffer | STRUCT2 | True | 88989.724768 |
-| Protostuff | serialize | array | SAMPLE | False | 663272.710783 |
-| Protostuff | serialize | array | MEDIA_CONTENT | False | 780618.761219 |
-| Protostuff | serialize | array | STRUCT | False | 330975.350403 |
-| Protostuff | serialize | array | STRUCT2 | False | 324563.440433 |
-| Protostuff | serialize | directBuffer | SAMPLE | False | 693641.589806 |
-| Protostuff | serialize | directBuffer | MEDIA_CONTENT | False |
805941.345157 |
-| Protostuff | serialize | directBuffer | STRUCT | False | 340262.650047 |
-| Protostuff | serialize | directBuffer | STRUCT2 | False | 325093.716261 |
-| Fst | deserialize | array | SAMPLE | False | 473409.796491 |
-| Fst | deserialize | array | SAMPLE | True | 428315.502365 |
-| Fst | deserialize | array | MEDIA_CONTENT | False | 363455.785182 |
-| Fst | deserialize | array | MEDIA_CONTENT | True | 304371.728638 |
-| Fst | deserialize | array | STRUCT | False | 357887.235311 |
-| Fst | deserialize | array | STRUCT | True | 353480.554035 |
-| Fst | deserialize | array | STRUCT2 | False | 280131.091068 |
-| Fst | deserialize | array | STRUCT2 | True | 260649.308016 |
-| Fst | deserialize | directBuffer | SAMPLE | False | 441027.550809 |
-| Fst | deserialize | directBuffer | SAMPLE | True | 420523.770904 |
-| Fst | deserialize | directBuffer | MEDIA_CONTENT | False | 311691.658687 |
-| Fst | deserialize | directBuffer | MEDIA_CONTENT | True | 251820.171513 |
-| Fst | deserialize | directBuffer | STRUCT | False | 352441.597147 |
-| Fst | deserialize | directBuffer | STRUCT | True | 334574.303484 |
-| Fst | deserialize | directBuffer | STRUCT2 | False | 262519.85881 |
-| Fst | deserialize | directBuffer | STRUCT2 | True | 234973.637096 |
-| Fory | deserialize | array | SAMPLE | False | 2069988.624415 |
-| Fory | deserialize | array | SAMPLE | True | 1797942.442313 |
-| Fory | deserialize | array | MEDIA_CONTENT | False | 2054066.903469 |
-| Fory | deserialize | array | MEDIA_CONTENT | True | 1507767.206603 |
-| Fory | deserialize | array | STRUCT | False | 4595230.434552 |
-| Fory | deserialize | array | STRUCT | True | 4634753.596131 |
-| Fory | deserialize | array | STRUCT2 | False | 1126298.35955 |
-| Fory | deserialize | array | STRUCT2 | True | 1046649.083082 |
-| Fory | deserialize | directBuffer | SAMPLE | False | 2429791.078395 |
-| Fory | deserialize | directBuffer | SAMPLE | True | 1958815.397807 |
-| Fory | deserialize | directBuffer | MEDIA_CONTENT | False | 1502746.028159 |
-| Fory | deserialize | directBuffer | MEDIA_CONTENT | True | 1290593.975753 |
-| Fory | deserialize | directBuffer | STRUCT | False | 5012002.859236 |
-| Fory | deserialize | directBuffer | STRUCT | True | 4864329.316938 |
-| Fory | deserialize | directBuffer | STRUCT2 | False | 1117586.457565 |
-| Fory | deserialize | directBuffer | STRUCT2 | True | 1018277.848128 |
-| Fory | deserialize_compatible | array | SAMPLE | False | 2496046.895861 |
-| Fory | deserialize_compatible | array | SAMPLE | True | 1834139.395757 |
-| Fory | deserialize_compatible | array | MEDIA_CONTENT | False |
1441671.70632 |
-| Fory | deserialize_compatible | array | MEDIA_CONTENT | True |
1121136.039627 |
-| Fory | deserialize_compatible | array | STRUCT | False | 2110335.039275 |
-| Fory | deserialize_compatible | array | STRUCT | True | 2135681.982674 |
-| Fory | deserialize_compatible | array | STRUCT2 | False | 849507.176263 |
-| Fory | deserialize_compatible | array | STRUCT2 | True | 815120.319155 |
-| Fory | deserialize_compatible | directBuffer | SAMPLE | False |
2308111.633661 |
-| Fory | deserialize_compatible | directBuffer | SAMPLE | True |
1820490.585648 |
-| Fory | deserialize_compatible | directBuffer | MEDIA_CONTENT | False |
1256034.732514 |
-| Fory | deserialize_compatible | directBuffer | MEDIA_CONTENT | True |
1054942.751816 |
-| Fory | deserialize_compatible | directBuffer | STRUCT | False |
1596464.248141 |
-| Fory | deserialize_compatible | directBuffer | STRUCT | True |
1684681.074242 |
-| Fory | deserialize_compatible | directBuffer | STRUCT2 | False |
784036.589363 |
-| Fory | deserialize_compatible | directBuffer | STRUCT2 | True |
782679.662083 |
-| Forymetashared | deserialize_compatible | array | SAMPLE | False |
2485564.396196 |
-| Forymetashared | deserialize_compatible | array | SAMPLE | True |
2002938.794909 |
-| Forymetashared | deserialize_compatible | array | MEDIA_CONTENT | False |
2479742.810882 |
-| Forymetashared | deserialize_compatible | array | MEDIA_CONTENT | True |
1623938.202345 |
-| Forymetashared | deserialize_compatible | array | STRUCT | False |
4978833.206806 |
-| Forymetashared | deserialize_compatible | array | STRUCT | True |
4807963.88252 |
-| Forymetashared | deserialize_compatible | array | STRUCT2 | False |
1201998.142474 |
-| Forymetashared | deserialize_compatible | array | STRUCT2 | True |
1058423.614156 |
-| Forymetashared | deserialize_compatible | directBuffer | SAMPLE | False |
2489261.533644 |
-| Forymetashared | deserialize_compatible | directBuffer | SAMPLE | True |
1927548.827586 |
-| Forymetashared | deserialize_compatible | directBuffer | MEDIA_CONTENT |
False | 1718098.363961 |
-| Forymetashared | deserialize_compatible | directBuffer | MEDIA_CONTENT |
True | 1333345.536684 |
-| Forymetashared | deserialize_compatible | directBuffer | STRUCT | False |
5149070.65783 |
-| Forymetashared | deserialize_compatible | directBuffer | STRUCT | True |
5137500.621288 |
-| Forymetashared | deserialize_compatible | directBuffer | STRUCT2 | False |
1131212.586953 |
-| Forymetashared | deserialize_compatible | directBuffer | STRUCT2 | True |
1089162.408165 |
-| Hession | deserialize | array | SAMPLE | False | 119471.518388 |
-| Hession | deserialize | array | SAMPLE | True | 121106.002978 |
-| Hession | deserialize | array | MEDIA_CONTENT | False | 118156.072484 |
-| Hession | deserialize | array | MEDIA_CONTENT | True | 120016.594171 |
-| Hession | deserialize | array | STRUCT | False | 84709.108821 |
-| Hession | deserialize | array | STRUCT | True | 91050.370244 |
-| Hession | deserialize | array | STRUCT2 | False | 69758.767783 |
-| Hession | deserialize | array | STRUCT2 | True | 68616.029248 |
-| Hession | deserialize | directBuffer | SAMPLE | False | 117806.916589 |
-| Hession | deserialize | directBuffer | SAMPLE | True | 121940.783597 |
-| Hession | deserialize | directBuffer | MEDIA_CONTENT | False | 111067.942626
|
-| Hession | deserialize | directBuffer | MEDIA_CONTENT | True | 121820.82126 |
-| Hession | deserialize | directBuffer | STRUCT | False | 91151.633583 |
-| Hession | deserialize | directBuffer | STRUCT | True | 91037.205901 |
-| Hession | deserialize | directBuffer | STRUCT2 | False | 66866.108653 |
-| Hession | deserialize | directBuffer | STRUCT2 | True | 65338.345185 |
-| Hession | deserialize_compatible | array | SAMPLE | False | 121898.105768 |
-| Hession | deserialize_compatible | array | SAMPLE | True | 121297.485903 |
-| Hession | deserialize_compatible | array | MEDIA_CONTENT | False |
121619.090797 |
-| Hession | deserialize_compatible | array | MEDIA_CONTENT | True |
119994.10405 |
-| Hession | deserialize_compatible | array | STRUCT | False | 88617.486795 |
-| Hession | deserialize_compatible | array | STRUCT | True | 90206.654212 |
-| Hession | deserialize_compatible | array | STRUCT2 | False | 63703.763814 |
-| Hession | deserialize_compatible | array | STRUCT2 | True | 69521.573119 |
-| Hession | deserialize_compatible | directBuffer | SAMPLE | False |
124044.417439 |
-| Hession | deserialize_compatible | directBuffer | SAMPLE | True |
120276.449497 |
-| Hession | deserialize_compatible | directBuffer | MEDIA_CONTENT | False |
107594.47489 |
-| Hession | deserialize_compatible | directBuffer | MEDIA_CONTENT | True |
116531.023438 |
-| Hession | deserialize_compatible | directBuffer | STRUCT | False |
89580.561575 |
-| Hession | deserialize_compatible | directBuffer | STRUCT | True |
84407.472531 |
-| Hession | deserialize_compatible | directBuffer | STRUCT2 | False |
69342.030965 |
-| Hession | deserialize_compatible | directBuffer | STRUCT2 | True |
68542.055543 |
-| Jdk | deserialize | array | SAMPLE | False | 29309.573998 |
-| Jdk | deserialize | array | SAMPLE | True | 27466.003923 |
-| Jdk | deserialize | array | MEDIA_CONTENT | False | 38536.250402 |
-| Jdk | deserialize | array | MEDIA_CONTENT | True | 38957.19109 |
-| Jdk | deserialize | array | STRUCT | False | 29603.066599 |
-| Jdk | deserialize | array | STRUCT | True | 29727.744196 |
-| Jdk | deserialize | array | STRUCT2 | False | 14888.805111 |
-| Jdk | deserialize | array | STRUCT2 | True | 14034.100664 |
-| Jdk | deserialize | directBuffer | SAMPLE | False | 28128.457935 |
-| Jdk | deserialize | directBuffer | SAMPLE | True | 28241.014735 |
-| Jdk | deserialize | directBuffer | MEDIA_CONTENT | False | 40512.632076 |
-| Jdk | deserialize | directBuffer | MEDIA_CONTENT | True | 37030.594632 |
-| Jdk | deserialize | directBuffer | STRUCT | False | 28717.004518 |
-| Jdk | deserialize | directBuffer | STRUCT | True | 29549.998286 |
-| Jdk | deserialize | directBuffer | STRUCT2 | False | 14652.043788 |
-| Jdk | deserialize | directBuffer | STRUCT2 | True | 14425.886048 |
-| Kryo | deserialize | array | SAMPLE | False | 979173.981159 |
-| Kryo | deserialize | array | SAMPLE | True | 716438.884369 |
-| Kryo | deserialize | array | MEDIA_CONTENT | False | 577631.234369 |
-| Kryo | deserialize | array | MEDIA_CONTENT | True | 365530.417232 |
-| Kryo | deserialize | array | STRUCT | False | 607750.343557 |
-| Kryo | deserialize | array | STRUCT | True | 552802.247807 |
-| Kryo | deserialize | array | STRUCT2 | False | 275984.042401 |
-| Kryo | deserialize | array | STRUCT2 | True | 242710.554833 |
-| Kryo | deserialize | directBuffer | SAMPLE | False | 983538.936801 |
-| Kryo | deserialize | directBuffer | SAMPLE | True | 762889.302732 |
-| Kryo | deserialize | directBuffer | MEDIA_CONTENT | False | 389473.174523 |
-| Kryo | deserialize | directBuffer | MEDIA_CONTENT | True | 306995.240799 |
-| Kryo | deserialize | directBuffer | STRUCT | False | 910534.169114 |
-| Kryo | deserialize | directBuffer | STRUCT | True | 914404.107564 |
-| Kryo | deserialize | directBuffer | STRUCT2 | False | 319247.256793 |
-| Kryo | deserialize | directBuffer | STRUCT2 | True | 249105.828416 |
-| Kryo | deserialize_compatible | array | SAMPLE | False | 255086.928308 |
-| Kryo | deserialize_compatible | array | SAMPLE | True | 238811.99551 |
-| Kryo | deserialize_compatible | array | MEDIA_CONTENT | False |
180882.860363 |
-| Kryo | deserialize_compatible | array | MEDIA_CONTENT | True | 154311.21154 |
-| Kryo | deserialize_compatible | array | STRUCT | False | 78771.635309 |
-| Kryo | deserialize_compatible | array | STRUCT | True | 72805.937649 |
-| Kryo | deserialize_compatible | array | STRUCT2 | False | 60602.285743 |
-| Kryo | deserialize_compatible | array | STRUCT2 | True | 62729.908347 |
-| Kryo | deserialize_compatible | directBuffer | SAMPLE | False | 201993.78789
|
-| Kryo | deserialize_compatible | directBuffer | SAMPLE | True | 174534.71087 |
-| Kryo | deserialize_compatible | directBuffer | MEDIA_CONTENT | False |
134485.1603 |
-| Kryo | deserialize_compatible | directBuffer | MEDIA_CONTENT | True |
119311.787329 |
-| Kryo | deserialize_compatible | directBuffer | STRUCT | False | 58574.904245
|
-| Kryo | deserialize_compatible | directBuffer | STRUCT | True | 60685.320299 |
-| Kryo | deserialize_compatible | directBuffer | STRUCT2 | False |
54637.329134 |
-| Kryo | deserialize_compatible | directBuffer | STRUCT2 | True | 51761.569591
|
-| Protostuff | deserialize | array | SAMPLE | False | 619338.385412 |
-| Protostuff | deserialize | array | MEDIA_CONTENT | False | 951662.019963 |
-| Protostuff | deserialize | array | STRUCT | False | 517381.168594 |
-| Protostuff | deserialize | array | STRUCT2 | False | 416212.973861 |
-| Protostuff | deserialize | directBuffer | SAMPLE | False | 624804.978534 |
-| Protostuff | deserialize | directBuffer | MEDIA_CONTENT | False |
964664.641598 |
-| Protostuff | deserialize | directBuffer | STRUCT | False | 538924.947147 |
-| Protostuff | deserialize | directBuffer | STRUCT2 | False | 425523.315814 |
+| Lib | Benchmark | bufferType | objectType |
references | Tps |
+| -------------- | ---------------------- | ------------ | ------------- |
---------- | --------------- |
+| Fst | serialize | array | SAMPLE |
False | 915907.574306 |
+| Fst | serialize | array | SAMPLE |
True | 731869.156376 |
+| Fst | serialize | array | MEDIA_CONTENT |
False | 751892.023189 |
+| Fst | serialize | array | MEDIA_CONTENT |
True | 583859.907758 |
+| Fst | serialize | array | STRUCT |
False | 882178.995727 |
+| Fst | serialize | array | STRUCT |
True | 757753.756691 |
+| Fst | serialize | array | STRUCT2 |
False | 371762.982661 |
+| Fst | serialize | array | STRUCT2 |
True | 380638.700267 |
+| Fst | serialize | directBuffer | SAMPLE |
False | 902302.261168 |
+| Fst | serialize | directBuffer | SAMPLE |
True | 723614.06677 |
+| Fst | serialize | directBuffer | MEDIA_CONTENT |
False | 728001.08025 |
+| Fst | serialize | directBuffer | MEDIA_CONTENT |
True | 595679.580108 |
+| Fst | serialize | directBuffer | STRUCT |
False | 807847.663261 |
+| Fst | serialize | directBuffer | STRUCT |
True | 762088.935404 |
+| Fst | serialize | directBuffer | STRUCT2 |
False | 365317.705376 |
+| Fst | serialize | directBuffer | STRUCT2 |
True | 370851.880711 |
+| Fory | serialize | array | SAMPLE |
False | 3570966.469087 |
+| Fory | serialize | array | SAMPLE |
True | 1767693.83509 |
+| Fory | serialize | array | MEDIA_CONTENT |
False | 3031642.924542 |
+| Fory | serialize | array | MEDIA_CONTENT |
True | 2450384.600246 |
+| Fory | serialize | array | STRUCT |
False | 7501415.56726 |
+| Fory | serialize | array | STRUCT |
True | 6264439.154428 |
+| Fory | serialize | array | STRUCT2 |
False | 3586126.623874 |
+| Fory | serialize | array | STRUCT2 |
True | 3306474.506382 |
+| Fory | serialize | directBuffer | SAMPLE |
False | 3684487.760591 |
+| Fory | serialize | directBuffer | SAMPLE |
True | 1826456.709478 |
+| Fory | serialize | directBuffer | MEDIA_CONTENT |
False | 2479862.129632 |
+| Fory | serialize | directBuffer | MEDIA_CONTENT |
True | 1938527.588331 |
+| Fory | serialize | directBuffer | STRUCT |
False | 9834243.243204 |
+| Fory | serialize | directBuffer | STRUCT |
True | 7551780.823133 |
+| Fory | serialize | directBuffer | STRUCT2 |
False | 2643155.135327 |
+| Fory | serialize | directBuffer | STRUCT2 |
True | 2391110.083108 |
+| Fory | serialize_compatible | array | SAMPLE |
False | 3604596.465625 |
+| Fory | serialize_compatible | array | SAMPLE |
True | 1619648.337293 |
+| Fory | serialize_compatible | array | MEDIA_CONTENT |
False | 1679272.036243 |
+| Fory | serialize_compatible | array | MEDIA_CONTENT |
True | 1406736.538716 |
+| Fory | serialize_compatible | array | STRUCT |
False | 3530406.108869 |
+| Fory | serialize_compatible | array | STRUCT |
True | 3293059.098127 |
+| Fory | serialize_compatible | array | STRUCT2 |
False | 2773368.99768 |
+| Fory | serialize_compatible | array | STRUCT2 |
True | 2564174.550276 |
+| Fory | serialize_compatible | directBuffer | SAMPLE |
False | 3484533.218305 |
+| Fory | serialize_compatible | directBuffer | SAMPLE |
True | 1730824.630648 |
+| Fory | serialize_compatible | directBuffer | MEDIA_CONTENT |
False | 1710680.937387 |
+| Fory | serialize_compatible | directBuffer | MEDIA_CONTENT |
True | 1149999.473994 |
+| Fory | serialize_compatible | directBuffer | STRUCT |
False | 2653169.568374 |
+| Fory | serialize_compatible | directBuffer | STRUCT |
True | 2393817.762938 |
+| Fory | serialize_compatible | directBuffer | STRUCT2 |
False | 1912402.937879 |
+| Fory | serialize_compatible | directBuffer | STRUCT2 |
True | 1848338.968058 |
+| Forymetashared | serialize_compatible | array | SAMPLE |
False | 4409055.687063 |
+| Forymetashared | serialize_compatible | array | SAMPLE |
True | 1840705.439334 |
+| Forymetashared | serialize_compatible | array | MEDIA_CONTENT |
False | 2992488.235281 |
+| Forymetashared | serialize_compatible | array | MEDIA_CONTENT |
True | 2058738.716953 |
+| Forymetashared | serialize_compatible | array | STRUCT |
False | 9204444.777172 |
+| Forymetashared | serialize_compatible | array | STRUCT |
True | 7064625.291374 |
+| Forymetashared | serialize_compatible | array | STRUCT2 |
False | 2575824.143864 |
+| Forymetashared | serialize_compatible | array | STRUCT2 |
True | 3543082.528217 |
+| Forymetashared | serialize_compatible | directBuffer | SAMPLE |
False | 5043538.364886 |
+| Forymetashared | serialize_compatible | directBuffer | SAMPLE |
True | 1859289.705838 |
+| Forymetashared | serialize_compatible | directBuffer | MEDIA_CONTENT |
False | 2491443.556971 |
+| Forymetashared | serialize_compatible | directBuffer | MEDIA_CONTENT |
True | 1804349.244125 |
+| Forymetashared | serialize_compatible | directBuffer | STRUCT |
False | 11650249.648715 |
+| Forymetashared | serialize_compatible | directBuffer | STRUCT |
True | 8702412.752357 |
+| Forymetashared | serialize_compatible | directBuffer | STRUCT2 |
False | 2714748.572448 |
+| Forymetashared | serialize_compatible | directBuffer | STRUCT2 |
True | 1866073.031851 |
+| Hession | serialize | array | SAMPLE |
False | 240386.502846 |
+| Hession | serialize | array | SAMPLE |
True | 192414.014211 |
+| Hession | serialize | array | MEDIA_CONTENT |
False | 367782.358049 |
+| Hession | serialize | array | MEDIA_CONTENT |
True | 329427.47068 |
+| Hession | serialize | array | STRUCT |
False | 258233.998931 |
+| Hession | serialize | array | STRUCT |
True | 260845.209485 |
+| Hession | serialize | array | STRUCT2 |
False | 56056.080075 |
+| Hession | serialize | array | STRUCT2 |
True | 60038.87979 |
+| Hession | serialize | directBuffer | SAMPLE |
False | 240981.308085 |
+| Hession | serialize | directBuffer | SAMPLE |
True | 211949.960255 |
+| Hession | serialize | directBuffer | MEDIA_CONTENT |
False | 372477.13815 |
+| Hession | serialize | directBuffer | MEDIA_CONTENT |
True | 353376.085025 |
+| Hession | serialize | directBuffer | STRUCT |
False | 266481.009245 |
+| Hession | serialize | directBuffer | STRUCT |
True | 261762.594966 |
+| Hession | serialize | directBuffer | STRUCT2 |
False | 55924.319442 |
+| Hession | serialize | directBuffer | STRUCT2 |
True | 56674.065604 |
+| Hession | serialize_compatible | array | SAMPLE |
False | 234454.975158 |
+| Hession | serialize_compatible | array | SAMPLE |
True | 206174.173039 |
+| Hession | serialize_compatible | array | MEDIA_CONTENT |
False | 377195.903772 |
+| Hession | serialize_compatible | array | MEDIA_CONTENT |
True | 351657.879556 |
+| Hession | serialize_compatible | array | STRUCT |
False | 258650.663523 |
+| Hession | serialize_compatible | array | STRUCT |
True | 263564.913879 |
+| Hession | serialize_compatible | array | STRUCT2 |
False | 58509.125342 |
+| Hession | serialize_compatible | array | STRUCT2 |
True | 55552.977735 |
+| Hession | serialize_compatible | directBuffer | SAMPLE |
False | 194761.244263 |
+| Hession | serialize_compatible | directBuffer | SAMPLE |
True | 212840.483308 |
+| Hession | serialize_compatible | directBuffer | MEDIA_CONTENT |
False | 371729.727192 |
+| Hession | serialize_compatible | directBuffer | MEDIA_CONTENT |
True | 343834.954942 |
+| Hession | serialize_compatible | directBuffer | STRUCT |
False | 249241.452137 |
+| Hession | serialize_compatible | directBuffer | STRUCT |
True | 263623.143601 |
+| Hession | serialize_compatible | directBuffer | STRUCT2 |
False | 58908.567439 |
+| Hession | serialize_compatible | directBuffer | STRUCT2 |
True | 55524.373547 |
+| Jdk | serialize | array | SAMPLE |
False | 118374.836631 |
+| Jdk | serialize | array | SAMPLE |
True | 119858.140625 |
+| Jdk | serialize | array | MEDIA_CONTENT |
False | 137989.198821 |
+| Jdk | serialize | array | MEDIA_CONTENT |
True | 140260.668888 |
+| Jdk | serialize | array | STRUCT |
False | 155908.24424 |
+| Jdk | serialize | array | STRUCT |
True | 151258.539369 |
+| Jdk | serialize | array | STRUCT2 |
False | 36846.049162 |
+| Jdk | serialize | array | STRUCT2 |
True | 38183.705811 |
+| Jdk | serialize | directBuffer | SAMPLE |
False | 118273.584257 |
+| Jdk | serialize | directBuffer | SAMPLE |
True | 108263.040839 |
+| Jdk | serialize | directBuffer | MEDIA_CONTENT |
False | 138567.623369 |
+| Jdk | serialize | directBuffer | MEDIA_CONTENT |
True | 140158.67391 |
+| Jdk | serialize | directBuffer | STRUCT |
False | 154875.908438 |
+| Jdk | serialize | directBuffer | STRUCT |
True | 156404.686214 |
+| Jdk | serialize | directBuffer | STRUCT2 |
False | 37444.967981 |
+| Jdk | serialize | directBuffer | STRUCT2 |
True | 35798.679246 |
+| Kryo | serialize | array | SAMPLE |
False | 1105365.931217 |
+| Kryo | serialize | array | SAMPLE |
True | 734215.482491 |
+| Kryo | serialize | array | MEDIA_CONTENT |
False | 730792.521676 |
+| Kryo | serialize | array | MEDIA_CONTENT |
True | 445251.084327 |
+| Kryo | serialize | array | STRUCT |
False | 558194.100861 |
+| Kryo | serialize | array | STRUCT |
True | 557542.628765 |
+| Kryo | serialize | array | STRUCT2 |
False | 325172.969175 |
+| Kryo | serialize | array | STRUCT2 |
True | 259863.332448 |
+| Kryo | serialize | directBuffer | SAMPLE |
False | 1376560.302168 |
+| Kryo | serialize | directBuffer | SAMPLE |
True | 932887.968348 |
+| Kryo | serialize | directBuffer | MEDIA_CONTENT |
False | 608972.51758 |
+| Kryo | serialize | directBuffer | MEDIA_CONTENT |
True | 359875.473951 |
+| Kryo | serialize | directBuffer | STRUCT |
False | 1078046.011115 |
+| Kryo | serialize | directBuffer | STRUCT |
True | 853350.408656 |
+| Kryo | serialize | directBuffer | STRUCT2 |
False | 355688.882786 |
+| Kryo | serialize | directBuffer | STRUCT2 |
True | 338960.426033 |
+| Kryo | serialize_compatible | array | SAMPLE |
False | 378907.663184 |
+| Kryo | serialize_compatible | array | SAMPLE |
True | 320815.567701 |
+| Kryo | serialize_compatible | array | MEDIA_CONTENT |
False | 188911.259146 |
+| Kryo | serialize_compatible | array | MEDIA_CONTENT |
True | 145782.916427 |
+| Kryo | serialize_compatible | array | STRUCT |
False | 145964.199559 |
+| Kryo | serialize_compatible | array | STRUCT |
True | 136180.832879 |
+| Kryo | serialize_compatible | array | STRUCT2 |
False | 125807.748004 |
+| Kryo | serialize_compatible | array | STRUCT2 |
True | 114983.546343 |
+| Kryo | serialize_compatible | directBuffer | SAMPLE |
False | 296102.615094 |
+| Kryo | serialize_compatible | directBuffer | SAMPLE |
True | 276757.392449 |
+| Kryo | serialize_compatible | directBuffer | MEDIA_CONTENT |
False | 185363.714829 |
+| Kryo | serialize_compatible | directBuffer | MEDIA_CONTENT |
True | 142836.961878 |
+| Kryo | serialize_compatible | directBuffer | STRUCT |
False | 106695.800245 |
+| Kryo | serialize_compatible | directBuffer | STRUCT |
True | 106458.212005 |
+| Kryo | serialize_compatible | directBuffer | STRUCT2 |
False | 92130.672361 |
+| Kryo | serialize_compatible | directBuffer | STRUCT2 |
True | 88989.724768 |
+| Protostuff | serialize | array | SAMPLE |
False | 663272.710783 |
+| Protostuff | serialize | array | MEDIA_CONTENT |
False | 780618.761219 |
+| Protostuff | serialize | array | STRUCT |
False | 330975.350403 |
+| Protostuff | serialize | array | STRUCT2 |
False | 324563.440433 |
+| Protostuff | serialize | directBuffer | SAMPLE |
False | 693641.589806 |
+| Protostuff | serialize | directBuffer | MEDIA_CONTENT |
False | 805941.345157 |
+| Protostuff | serialize | directBuffer | STRUCT |
False | 340262.650047 |
+| Protostuff | serialize | directBuffer | STRUCT2 |
False | 325093.716261 |
+| Fst | deserialize | array | SAMPLE |
False | 473409.796491 |
+| Fst | deserialize | array | SAMPLE |
True | 428315.502365 |
+| Fst | deserialize | array | MEDIA_CONTENT |
False | 363455.785182 |
+| Fst | deserialize | array | MEDIA_CONTENT |
True | 304371.728638 |
+| Fst | deserialize | array | STRUCT |
False | 357887.235311 |
+| Fst | deserialize | array | STRUCT |
True | 353480.554035 |
+| Fst | deserialize | array | STRUCT2 |
False | 280131.091068 |
+| Fst | deserialize | array | STRUCT2 |
True | 260649.308016 |
+| Fst | deserialize | directBuffer | SAMPLE |
False | 441027.550809 |
+| Fst | deserialize | directBuffer | SAMPLE |
True | 420523.770904 |
+| Fst | deserialize | directBuffer | MEDIA_CONTENT |
False | 311691.658687 |
+| Fst | deserialize | directBuffer | MEDIA_CONTENT |
True | 251820.171513 |
+| Fst | deserialize | directBuffer | STRUCT |
False | 352441.597147 |
+| Fst | deserialize | directBuffer | STRUCT |
True | 334574.303484 |
+| Fst | deserialize | directBuffer | STRUCT2 |
False | 262519.85881 |
+| Fst | deserialize | directBuffer | STRUCT2 |
True | 234973.637096 |
+| Fory | deserialize | array | SAMPLE |
False | 2069988.624415 |
+| Fory | deserialize | array | SAMPLE |
True | 1797942.442313 |
+| Fory | deserialize | array | MEDIA_CONTENT |
False | 2054066.903469 |
+| Fory | deserialize | array | MEDIA_CONTENT |
True | 1507767.206603 |
+| Fory | deserialize | array | STRUCT |
False | 4595230.434552 |
+| Fory | deserialize | array | STRUCT |
True | 4634753.596131 |
+| Fory | deserialize | array | STRUCT2 |
False | 1126298.35955 |
+| Fory | deserialize | array | STRUCT2 |
True | 1046649.083082 |
+| Fory | deserialize | directBuffer | SAMPLE |
False | 2429791.078395 |
+| Fory | deserialize | directBuffer | SAMPLE |
True | 1958815.397807 |
+| Fory | deserialize | directBuffer | MEDIA_CONTENT |
False | 1502746.028159 |
+| Fory | deserialize | directBuffer | MEDIA_CONTENT |
True | 1290593.975753 |
+| Fory | deserialize | directBuffer | STRUCT |
False | 5012002.859236 |
+| Fory | deserialize | directBuffer | STRUCT |
True | 4864329.316938 |
+| Fory | deserialize | directBuffer | STRUCT2 |
False | 1117586.457565 |
+| Fory | deserialize | directBuffer | STRUCT2 |
True | 1018277.848128 |
+| Fory | deserialize_compatible | array | SAMPLE |
False | 2496046.895861 |
+| Fory | deserialize_compatible | array | SAMPLE |
True | 1834139.395757 |
+| Fory | deserialize_compatible | array | MEDIA_CONTENT |
False | 1441671.70632 |
+| Fory | deserialize_compatible | array | MEDIA_CONTENT |
True | 1121136.039627 |
+| Fory | deserialize_compatible | array | STRUCT |
False | 2110335.039275 |
+| Fory | deserialize_compatible | array | STRUCT |
True | 2135681.982674 |
+| Fory | deserialize_compatible | array | STRUCT2 |
False | 849507.176263 |
+| Fory | deserialize_compatible | array | STRUCT2 |
True | 815120.319155 |
+| Fory | deserialize_compatible | directBuffer | SAMPLE |
False | 2308111.633661 |
+| Fory | deserialize_compatible | directBuffer | SAMPLE |
True | 1820490.585648 |
+| Fory | deserialize_compatible | directBuffer | MEDIA_CONTENT |
False | 1256034.732514 |
+| Fory | deserialize_compatible | directBuffer | MEDIA_CONTENT |
True | 1054942.751816 |
+| Fory | deserialize_compatible | directBuffer | STRUCT |
False | 1596464.248141 |
+| Fory | deserialize_compatible | directBuffer | STRUCT |
True | 1684681.074242 |
+| Fory | deserialize_compatible | directBuffer | STRUCT2 |
False | 784036.589363 |
+| Fory | deserialize_compatible | directBuffer | STRUCT2 |
True | 782679.662083 |
+| Forymetashared | deserialize_compatible | array | SAMPLE |
False | 2485564.396196 |
+| Forymetashared | deserialize_compatible | array | SAMPLE |
True | 2002938.794909 |
+| Forymetashared | deserialize_compatible | array | MEDIA_CONTENT |
False | 2479742.810882 |
+| Forymetashared | deserialize_compatible | array | MEDIA_CONTENT |
True | 1623938.202345 |
+| Forymetashared | deserialize_compatible | array | STRUCT |
False | 4978833.206806 |
+| Forymetashared | deserialize_compatible | array | STRUCT |
True | 4807963.88252 |
+| Forymetashared | deserialize_compatible | array | STRUCT2 |
False | 1201998.142474 |
+| Forymetashared | deserialize_compatible | array | STRUCT2 |
True | 1058423.614156 |
+| Forymetashared | deserialize_compatible | directBuffer | SAMPLE |
False | 2489261.533644 |
+| Forymetashared | deserialize_compatible | directBuffer | SAMPLE |
True | 1927548.827586 |
+| Forymetashared | deserialize_compatible | directBuffer | MEDIA_CONTENT |
False | 1718098.363961 |
+| Forymetashared | deserialize_compatible | directBuffer | MEDIA_CONTENT |
True | 1333345.536684 |
+| Forymetashared | deserialize_compatible | directBuffer | STRUCT |
False | 5149070.65783 |
+| Forymetashared | deserialize_compatible | directBuffer | STRUCT |
True | 5137500.621288 |
+| Forymetashared | deserialize_compatible | directBuffer | STRUCT2 |
False | 1131212.586953 |
+| Forymetashared | deserialize_compatible | directBuffer | STRUCT2 |
True | 1089162.408165 |
+| Hession | deserialize | array | SAMPLE |
False | 119471.518388 |
+| Hession | deserialize | array | SAMPLE |
True | 121106.002978 |
+| Hession | deserialize | array | MEDIA_CONTENT |
False | 118156.072484 |
+| Hession | deserialize | array | MEDIA_CONTENT |
True | 120016.594171 |
+| Hession | deserialize | array | STRUCT |
False | 84709.108821 |
+| Hession | deserialize | array | STRUCT |
True | 91050.370244 |
+| Hession | deserialize | array | STRUCT2 |
False | 69758.767783 |
+| Hession | deserialize | array | STRUCT2 |
True | 68616.029248 |
+| Hession | deserialize | directBuffer | SAMPLE |
False | 117806.916589 |
+| Hession | deserialize | directBuffer | SAMPLE |
True | 121940.783597 |
+| Hession | deserialize | directBuffer | MEDIA_CONTENT |
False | 111067.942626 |
+| Hession | deserialize | directBuffer | MEDIA_CONTENT |
True | 121820.82126 |
+| Hession | deserialize | directBuffer | STRUCT |
False | 91151.633583 |
+| Hession | deserialize | directBuffer | STRUCT |
True | 91037.205901 |
+| Hession | deserialize | directBuffer | STRUCT2 |
False | 66866.108653 |
+| Hession | deserialize | directBuffer | STRUCT2 |
True | 65338.345185 |
+| Hession | deserialize_compatible | array | SAMPLE |
False | 121898.105768 |
+| Hession | deserialize_compatible | array | SAMPLE |
True | 121297.485903 |
+| Hession | deserialize_compatible | array | MEDIA_CONTENT |
False | 121619.090797 |
+| Hession | deserialize_compatible | array | MEDIA_CONTENT |
True | 119994.10405 |
+| Hession | deserialize_compatible | array | STRUCT |
False | 88617.486795 |
+| Hession | deserialize_compatible | array | STRUCT |
True | 90206.654212 |
+| Hession | deserialize_compatible | array | STRUCT2 |
False | 63703.763814 |
+| Hession | deserialize_compatible | array | STRUCT2 |
True | 69521.573119 |
+| Hession | deserialize_compatible | directBuffer | SAMPLE |
False | 124044.417439 |
+| Hession | deserialize_compatible | directBuffer | SAMPLE |
True | 120276.449497 |
+| Hession | deserialize_compatible | directBuffer | MEDIA_CONTENT |
False | 107594.47489 |
+| Hession | deserialize_compatible | directBuffer | MEDIA_CONTENT |
True | 116531.023438 |
+| Hession | deserialize_compatible | directBuffer | STRUCT |
False | 89580.561575 |
+| Hession | deserialize_compatible | directBuffer | STRUCT |
True | 84407.472531 |
+| Hession | deserialize_compatible | directBuffer | STRUCT2 |
False | 69342.030965 |
+| Hession | deserialize_compatible | directBuffer | STRUCT2 |
True | 68542.055543 |
+| Jdk | deserialize | array | SAMPLE |
False | 29309.573998 |
+| Jdk | deserialize | array | SAMPLE |
True | 27466.003923 |
+| Jdk | deserialize | array | MEDIA_CONTENT |
False | 38536.250402 |
+| Jdk | deserialize | array | MEDIA_CONTENT |
True | 38957.19109 |
+| Jdk | deserialize | array | STRUCT |
False | 29603.066599 |
+| Jdk | deserialize | array | STRUCT |
True | 29727.744196 |
+| Jdk | deserialize | array | STRUCT2 |
False | 14888.805111 |
+| Jdk | deserialize | array | STRUCT2 |
True | 14034.100664 |
+| Jdk | deserialize | directBuffer | SAMPLE |
False | 28128.457935 |
+| Jdk | deserialize | directBuffer | SAMPLE |
True | 28241.014735 |
+| Jdk | deserialize | directBuffer | MEDIA_CONTENT |
False | 40512.632076 |
+| Jdk | deserialize | directBuffer | MEDIA_CONTENT |
True | 37030.594632 |
+| Jdk | deserialize | directBuffer | STRUCT |
False | 28717.004518 |
+| Jdk | deserialize | directBuffer | STRUCT |
True | 29549.998286 |
+| Jdk | deserialize | directBuffer | STRUCT2 |
False | 14652.043788 |
+| Jdk | deserialize | directBuffer | STRUCT2 |
True | 14425.886048 |
+| Kryo | deserialize | array | SAMPLE |
False | 979173.981159 |
+| Kryo | deserialize | array | SAMPLE |
True | 716438.884369 |
+| Kryo | deserialize | array | MEDIA_CONTENT |
False | 577631.234369 |
+| Kryo | deserialize | array | MEDIA_CONTENT |
True | 365530.417232 |
+| Kryo | deserialize | array | STRUCT |
False | 607750.343557 |
+| Kryo | deserialize | array | STRUCT |
True | 552802.247807 |
+| Kryo | deserialize | array | STRUCT2 |
False | 275984.042401 |
+| Kryo | deserialize | array | STRUCT2 |
True | 242710.554833 |
+| Kryo | deserialize | directBuffer | SAMPLE |
False | 983538.936801 |
+| Kryo | deserialize | directBuffer | SAMPLE |
True | 762889.302732 |
+| Kryo | deserialize | directBuffer | MEDIA_CONTENT |
False | 389473.174523 |
+| Kryo | deserialize | directBuffer | MEDIA_CONTENT |
True | 306995.240799 |
+| Kryo | deserialize | directBuffer | STRUCT |
False | 910534.169114 |
+| Kryo | deserialize | directBuffer | STRUCT |
True | 914404.107564 |
+| Kryo | deserialize | directBuffer | STRUCT2 |
False | 319247.256793 |
+| Kryo | deserialize | directBuffer | STRUCT2 |
True | 249105.828416 |
+| Kryo | deserialize_compatible | array | SAMPLE |
False | 255086.928308 |
+| Kryo | deserialize_compatible | array | SAMPLE |
True | 238811.99551 |
+| Kryo | deserialize_compatible | array | MEDIA_CONTENT |
False | 180882.860363 |
+| Kryo | deserialize_compatible | array | MEDIA_CONTENT |
True | 154311.21154 |
+| Kryo | deserialize_compatible | array | STRUCT |
False | 78771.635309 |
+| Kryo | deserialize_compatible | array | STRUCT |
True | 72805.937649 |
+| Kryo | deserialize_compatible | array | STRUCT2 |
False | 60602.285743 |
+| Kryo | deserialize_compatible | array | STRUCT2 |
True | 62729.908347 |
+| Kryo | deserialize_compatible | directBuffer | SAMPLE |
False | 201993.78789 |
+| Kryo | deserialize_compatible | directBuffer | SAMPLE |
True | 174534.71087 |
+| Kryo | deserialize_compatible | directBuffer | MEDIA_CONTENT |
False | 134485.1603 |
+| Kryo | deserialize_compatible | directBuffer | MEDIA_CONTENT |
True | 119311.787329 |
+| Kryo | deserialize_compatible | directBuffer | STRUCT |
False | 58574.904245 |
+| Kryo | deserialize_compatible | directBuffer | STRUCT |
True | 60685.320299 |
+| Kryo | deserialize_compatible | directBuffer | STRUCT2 |
False | 54637.329134 |
+| Kryo | deserialize_compatible | directBuffer | STRUCT2 |
True | 51761.569591 |
+| Protostuff | deserialize | array | SAMPLE |
False | 619338.385412 |
+| Protostuff | deserialize | array | MEDIA_CONTENT |
False | 951662.019963 |
+| Protostuff | deserialize | array | STRUCT |
False | 517381.168594 |
+| Protostuff | deserialize | array | STRUCT2 |
False | 416212.973861 |
+| Protostuff | deserialize | directBuffer | SAMPLE |
False | 624804.978534 |
+| Protostuff | deserialize | directBuffer | MEDIA_CONTENT |
False | 964664.641598 |
+| Protostuff | deserialize | directBuffer | STRUCT |
False | 538924.947147 |
+| Protostuff | deserialize | directBuffer | STRUCT2 |
False | 425523.315814 |
### Java Zero-copy
-| Lib | Benchmark | array_size | bufferType | dataType | Tps |
-| ------- | ------- | ------- | ------- | ------- | ------- |
-| Fst | deserialize | 200 | array | PRIMITIVE_ARRAY | 219333.990504 |
-| Fst | deserialize | 200 | array | BUFFER | 657754.887247 |
-| Fst | deserialize | 200 | directBuffer | PRIMITIVE_ARRAY | 179604.045774 |
-| Fst | deserialize | 200 | directBuffer | BUFFER | 598421.278941 |
-| Fst | deserialize | 1000 | array | PRIMITIVE_ARRAY | 53100.903684 |
-| Fst | deserialize | 1000 | array | BUFFER | 424147.154601 |
-| Fst | deserialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 38572.001768 |
-| Fst | deserialize | 1000 | directBuffer | BUFFER | 298929.116572 |
-| Fst | deserialize | 5000 | array | PRIMITIVE_ARRAY | 10672.872798 |
-| Fst | deserialize | 5000 | array | BUFFER | 136934.604328 |
-| Fst | deserialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 8561.694533 |
-| Fst | deserialize | 5000 | directBuffer | BUFFER | 77950.612503 |
-| Fst | serialize | 200 | array | PRIMITIVE_ARRAY | 313986.053417 |
-| Fst | serialize | 200 | array | BUFFER | 2400193.240466 |
-| Fst | serialize | 200 | directBuffer | PRIMITIVE_ARRAY | 294132.218623 |
-| Fst | serialize | 200 | directBuffer | BUFFER | 2482550.111756 |
-| Fst | serialize | 1000 | array | PRIMITIVE_ARRAY | 67209.107012 |
-| Fst | serialize | 1000 | array | BUFFER | 1805557.47781 |
-| Fst | serialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 66108.014324 |
-| Fst | serialize | 1000 | directBuffer | BUFFER | 1644789.42701 |
-| Fst | serialize | 5000 | array | PRIMITIVE_ARRAY | 14997.400124 |
-| Fst | serialize | 5000 | array | BUFFER | 811029.402136 |
-| Fst | serialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 15000.378818 |
-| Fst | serialize | 5000 | directBuffer | BUFFER | 477148.54085 |
-| Fory | deserialize | 200 | array | PRIMITIVE_ARRAY | 986136.067809 |
-| Fory | deserialize | 200 | array | BUFFER | 3302149.383135 |
-| Fory | deserialize | 200 | directBuffer | PRIMITIVE_ARRAY | 991807.969328 |
-| Fory | deserialize | 200 | directBuffer | BUFFER | 3113115.471758 |
-| Fory | deserialize | 1000 | array | PRIMITIVE_ARRAY | 205671.992736 |
-| Fory | deserialize | 1000 | array | BUFFER | 2831942.848999 |
-| Fory | deserialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 202475.242341 |
-| Fory | deserialize | 1000 | directBuffer | BUFFER | 3397690.327371 |
-| Fory | deserialize | 5000 | array | PRIMITIVE_ARRAY | 40312.590172 |
-| Fory | deserialize | 5000 | array | BUFFER | 3296658.120035 |
-| Fory | deserialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 40413.743717 |
-| Fory | deserialize | 5000 | directBuffer | BUFFER | 3284441.570594 |
-| Fory | serialize | 200 | array | PRIMITIVE_ARRAY | 8297232.942927 |
-| Fory | serialize | 200 | array | BUFFER | 5123572.914045 |
-| Fory | serialize | 200 | directBuffer | PRIMITIVE_ARRAY | 8335248.350301 |
-| Fory | serialize | 200 | directBuffer | BUFFER | 5400346.890126 |
-| Fory | serialize | 1000 | array | PRIMITIVE_ARRAY | 8772856.921028 |
-| Fory | serialize | 1000 | array | BUFFER | 4979590.929127 |
-| Fory | serialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 8207563.785251 |
-| Fory | serialize | 1000 | directBuffer | BUFFER | 5376191.775007 |
-| Fory | serialize | 5000 | array | PRIMITIVE_ARRAY | 8027439.580246 |
-| Fory | serialize | 5000 | array | BUFFER | 5018916.32477 |
-| Fory | serialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 7695981.988316 |
-| Fory | serialize | 5000 | directBuffer | BUFFER | 5330897.68296 |
-| Kryo | deserialize | 200 | array | PRIMITIVE_ARRAY | 146675.360652 |
-| Kryo | deserialize | 200 | array | BUFFER | 1296284.78772 |
-| Kryo | deserialize | 200 | directBuffer | PRIMITIVE_ARRAY | 518713.299424 |
-| Kryo | deserialize | 200 | directBuffer | BUFFER | 1004844.498712 |
-| Kryo | deserialize | 1000 | array | PRIMITIVE_ARRAY | 30409.835023 |
-| Kryo | deserialize | 1000 | array | BUFFER | 721266.54113 |
-| Kryo | deserialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 112132.004609 |
-| Kryo | deserialize | 1000 | directBuffer | BUFFER | 592972.713203 |
-| Kryo | deserialize | 5000 | array | PRIMITIVE_ARRAY | 6124.351248 |
-| Kryo | deserialize | 5000 | array | BUFFER | 147251.846111 |
-| Kryo | deserialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 21826.04041 |
-| Kryo | deserialize | 5000 | directBuffer | BUFFER | 148614.476829 |
-| Kryo | serialize | 200 | array | PRIMITIVE_ARRAY | 147342.606262 |
-| Kryo | serialize | 200 | array | BUFFER | 1985187.977633 |
-| Kryo | serialize | 200 | directBuffer | PRIMITIVE_ARRAY | 972683.763633 |
-| Kryo | serialize | 200 | directBuffer | BUFFER | 1739454.51977 |
-| Kryo | serialize | 1000 | array | PRIMITIVE_ARRAY | 31395.721514 |
-| Kryo | serialize | 1000 | array | BUFFER | 1616159.67123 |
-| Kryo | serialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 209183.090868 |
-| Kryo | serialize | 1000 | directBuffer | BUFFER | 1377272.56851 |
-| Kryo | serialize | 5000 | array | PRIMITIVE_ARRAY | 6248.006967 |
-| Kryo | serialize | 5000 | array | BUFFER | 711287.533377 |
-| Kryo | serialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 43565.678616 |
-| Kryo | serialize | 5000 | directBuffer | BUFFER | 707092.956534 |
+| Lib | Benchmark | array_size | bufferType | dataType | Tps
|
+| ---- | ----------- | ---------- | ------------ | --------------- |
-------------- |
+| Fst | deserialize | 200 | array | PRIMITIVE_ARRAY |
219333.990504 |
+| Fst | deserialize | 200 | array | BUFFER |
657754.887247 |
+| Fst | deserialize | 200 | directBuffer | PRIMITIVE_ARRAY |
179604.045774 |
+| Fst | deserialize | 200 | directBuffer | BUFFER |
598421.278941 |
+| Fst | deserialize | 1000 | array | PRIMITIVE_ARRAY |
53100.903684 |
+| Fst | deserialize | 1000 | array | BUFFER |
424147.154601 |
+| Fst | deserialize | 1000 | directBuffer | PRIMITIVE_ARRAY |
38572.001768 |
+| Fst | deserialize | 1000 | directBuffer | BUFFER |
298929.116572 |
+| Fst | deserialize | 5000 | array | PRIMITIVE_ARRAY |
10672.872798 |
+| Fst | deserialize | 5000 | array | BUFFER |
136934.604328 |
+| Fst | deserialize | 5000 | directBuffer | PRIMITIVE_ARRAY |
8561.694533 |
+| Fst | deserialize | 5000 | directBuffer | BUFFER |
77950.612503 |
+| Fst | serialize | 200 | array | PRIMITIVE_ARRAY |
313986.053417 |
+| Fst | serialize | 200 | array | BUFFER |
2400193.240466 |
+| Fst | serialize | 200 | directBuffer | PRIMITIVE_ARRAY |
294132.218623 |
+| Fst | serialize | 200 | directBuffer | BUFFER |
2482550.111756 |
+| Fst | serialize | 1000 | array | PRIMITIVE_ARRAY |
67209.107012 |
+| Fst | serialize | 1000 | array | BUFFER |
1805557.47781 |
+| Fst | serialize | 1000 | directBuffer | PRIMITIVE_ARRAY |
66108.014324 |
+| Fst | serialize | 1000 | directBuffer | BUFFER |
1644789.42701 |
+| Fst | serialize | 5000 | array | PRIMITIVE_ARRAY |
14997.400124 |
+| Fst | serialize | 5000 | array | BUFFER |
811029.402136 |
+| Fst | serialize | 5000 | directBuffer | PRIMITIVE_ARRAY |
15000.378818 |
+| Fst | serialize | 5000 | directBuffer | BUFFER |
477148.54085 |
+| Fory | deserialize | 200 | array | PRIMITIVE_ARRAY |
986136.067809 |
+| Fory | deserialize | 200 | array | BUFFER |
3302149.383135 |
+| Fory | deserialize | 200 | directBuffer | PRIMITIVE_ARRAY |
991807.969328 |
+| Fory | deserialize | 200 | directBuffer | BUFFER |
3113115.471758 |
+| Fory | deserialize | 1000 | array | PRIMITIVE_ARRAY |
205671.992736 |
+| Fory | deserialize | 1000 | array | BUFFER |
2831942.848999 |
+| Fory | deserialize | 1000 | directBuffer | PRIMITIVE_ARRAY |
202475.242341 |
+| Fory | deserialize | 1000 | directBuffer | BUFFER |
3397690.327371 |
+| Fory | deserialize | 5000 | array | PRIMITIVE_ARRAY |
40312.590172 |
+| Fory | deserialize | 5000 | array | BUFFER |
3296658.120035 |
+| Fory | deserialize | 5000 | directBuffer | PRIMITIVE_ARRAY |
40413.743717 |
+| Fory | deserialize | 5000 | directBuffer | BUFFER |
3284441.570594 |
+| Fory | serialize | 200 | array | PRIMITIVE_ARRAY |
8297232.942927 |
+| Fory | serialize | 200 | array | BUFFER |
5123572.914045 |
+| Fory | serialize | 200 | directBuffer | PRIMITIVE_ARRAY |
8335248.350301 |
+| Fory | serialize | 200 | directBuffer | BUFFER |
5400346.890126 |
+| Fory | serialize | 1000 | array | PRIMITIVE_ARRAY |
8772856.921028 |
+| Fory | serialize | 1000 | array | BUFFER |
4979590.929127 |
+| Fory | serialize | 1000 | directBuffer | PRIMITIVE_ARRAY |
8207563.785251 |
+| Fory | serialize | 1000 | directBuffer | BUFFER |
5376191.775007 |
+| Fory | serialize | 5000 | array | PRIMITIVE_ARRAY |
8027439.580246 |
+| Fory | serialize | 5000 | array | BUFFER |
5018916.32477 |
+| Fory | serialize | 5000 | directBuffer | PRIMITIVE_ARRAY |
7695981.988316 |
+| Fory | serialize | 5000 | directBuffer | BUFFER |
5330897.68296 |
+| Kryo | deserialize | 200 | array | PRIMITIVE_ARRAY |
146675.360652 |
+| Kryo | deserialize | 200 | array | BUFFER |
1296284.78772 |
+| Kryo | deserialize | 200 | directBuffer | PRIMITIVE_ARRAY |
518713.299424 |
+| Kryo | deserialize | 200 | directBuffer | BUFFER |
1004844.498712 |
+| Kryo | deserialize | 1000 | array | PRIMITIVE_ARRAY |
30409.835023 |
+| Kryo | deserialize | 1000 | array | BUFFER |
721266.54113 |
+| Kryo | deserialize | 1000 | directBuffer | PRIMITIVE_ARRAY |
112132.004609 |
+| Kryo | deserialize | 1000 | directBuffer | BUFFER |
592972.713203 |
+| Kryo | deserialize | 5000 | array | PRIMITIVE_ARRAY |
6124.351248 |
+| Kryo | deserialize | 5000 | array | BUFFER |
147251.846111 |
+| Kryo | deserialize | 5000 | directBuffer | PRIMITIVE_ARRAY |
21826.04041 |
+| Kryo | deserialize | 5000 | directBuffer | BUFFER |
148614.476829 |
+| Kryo | serialize | 200 | array | PRIMITIVE_ARRAY |
147342.606262 |
+| Kryo | serialize | 200 | array | BUFFER |
1985187.977633 |
+| Kryo | serialize | 200 | directBuffer | PRIMITIVE_ARRAY |
972683.763633 |
+| Kryo | serialize | 200 | directBuffer | BUFFER |
1739454.51977 |
+| Kryo | serialize | 1000 | array | PRIMITIVE_ARRAY |
31395.721514 |
+| Kryo | serialize | 1000 | array | BUFFER |
1616159.67123 |
+| Kryo | serialize | 1000 | directBuffer | PRIMITIVE_ARRAY |
209183.090868 |
+| Kryo | serialize | 1000 | directBuffer | BUFFER |
1377272.56851 |
+| Kryo | serialize | 5000 | array | PRIMITIVE_ARRAY |
6248.006967 |
+| Kryo | serialize | 5000 | array | BUFFER |
711287.533377 |
+| Kryo | serialize | 5000 | directBuffer | PRIMITIVE_ARRAY |
43565.678616 |
+| Kryo | serialize | 5000 | directBuffer | BUFFER |
707092.956534 |
diff --git a/docs/cpp_debug.md b/docs/cpp_debug.md
index c565da62..f288d28b 100644
--- a/docs/cpp_debug.md
+++ b/docs/cpp_debug.md
@@ -40,4 +40,4 @@ java/python debugging.
- If debugging doesn't work, please select correct debug/run options:
<img src="images/vscode_select_debug_run.png" alt="select correct debug/run
options" width="50%" height="50%" />
- Debug will jump to source files in bazel generated directory, we need to
return raw files in source tree
-for debugging again: <img src="images/jmp_generate_file.png" alt="jump to
generated files" width="50%" height="50%" />
+ for debugging again: <img src="images/jmp_generate_file.png" alt="jump to
generated files" width="50%" height="50%" />
diff --git a/docs/guide/graalvm_guide.md b/docs/guide/graalvm_guide.md
index 59fead71..faae421d 100644
--- a/docs/guide/graalvm_guide.md
+++ b/docs/guide/graalvm_guide.md
@@ -29,7 +29,7 @@ Fory runs on GraalVM native image pretty well. Fory generates
all serializer cod
any extra cost, the performance is great.
In order to use Fory on graalvm native image, you must create Fory as an
**static** field of a class, and **register** all classes at
- the enclosing class initialize time. Then configure `native-image.properties`
under
+the enclosing class initialize time. Then configure `native-image.properties`
under
`resources/META-INF/native-image/$xxx/native-image.propertie` to tell graalvm
to init the class at native image
build time. For example, here we configure `org.apache.fory.graalvm.Example`
class be init at build time:
diff --git a/docs/guide/java_serialization_guide.md
b/docs/guide/java_serialization_guide.md
index 728b5f1c..df142ceb 100644
--- a/docs/guide/java_serialization_guide.md
+++ b/docs/guide/java_serialization_guide.md
@@ -19,8 +19,6 @@ license: |
limitations under the License.
---
-## Java object graph serialization
-
When only java object serialization needed, this mode will have better
performance compared to cross-language object
graph serialization.
@@ -213,7 +211,7 @@ class metadata.
To further reduce metadata costs, Fory introduces a class metadata sharing
mechanism, which allows the metadata to be
sent to the deserialization process only once. For more details, please refer
to the [Meta
Sharing](https://fory.apache.org/docs/specification/fory_java_serialization_spec#meta-share)
specification.
-### Smaller size
+### Compression
`ForyBuilder#withIntCompressed`/`ForyBuilder#withLongCompressed` can be used
to compress int/long for smaller size.
Normally compress int is enough.
@@ -1097,6 +1095,8 @@ Note that when implementing custom map or collection
serializers:
3. Properly handle reference tracking if needed
4. Implement proper size management using `setNumElements` and
`getAndClearNumElements` when `supportCodegenHook` is `true`
+Besides registering serializes, one can also implement
`java.io.Externalizable` for a class to customize serialization logic, such
type will be serialized by fory `ExternalizableSerializer`.
+
### Security & Class Registration
`ForyBuilder#requireClassRegistration` can be used to disable class
registration, this will allow to deserialize objects
@@ -1162,12 +1162,6 @@ If there are no duplicate name for type, `namespace` can
be left as empty to red
**Do not use this API to register class since it will increase serialized size
a lot compared to register
class by id**
-### Serializer Registration
-
-You can also register a custom serializer for a class by
`Fory#registerSerializer` API.
-
-Or implement `java.io.Externalizable` for a class.
-
### Zero-Copy Serialization
```java
@@ -1250,17 +1244,17 @@ losing any information.
If metadata sharing is not enabled, the new class data will be skipped and an
`NonexistentSkipClass` stub object will be
returned.
-### Coping/Mapping object from one type to another type
+### Copy/Map object from one type to another type
Fory support mapping object from one type to another type.
> Notes:
>
> 1. This mapping will execute a deep copy, all mapped fields are serialized
> into binary and
-> deserialized from that binary to map into another type.
+> deserialized from that binary to map into another type.
> 2. All struct types must be registered with same ID, otherwise Fory can not
> mapping to correct struct type.
-> Be careful when you use `Fory#register(Class)`, because fory will allocate
an auto-grown ID which might be
-> inconsistent if you register classes with different order between Fory
instance.
+> Be careful when you use `Fory#register(Class)`, because fory will
allocate an auto-grown ID which might be
+> inconsistent if you register classes with different order between Fory
instance.
```java
public class StructMappingExample {
diff --git a/docs/guide/row_format_guide.md b/docs/guide/row_format_guide.md
index f48ee5c2..a2beeabe 100644
--- a/docs/guide/row_format_guide.md
+++ b/docs/guide/row_format_guide.md
@@ -19,9 +19,7 @@ license: |
limitations under the License.
---
-## Row format protocol
-
-### Java
+## Java
```java
public class Bar {
@@ -68,7 +66,7 @@ Bar newBar = barEncoder.fromRow(barStruct);
Bar newBar2 = barEncoder.fromRow(binaryArray4.getStruct(20));
```
-### Python
+## Python
```python
@dataclass
@@ -116,13 +114,13 @@ for (int i = 0; i < 10; i++) {
return arrowWriter.finishAsRecordBatch();
```
-### Support for Interface and Extension Types
+## Support for Interface and Extension Types
Fury now supports row format mapping for Java `interface` types and subclassed
(`extends`) types, enabling more dynamic and flexible data schemas.
These enhancements were introduced in
[#2243](https://github.com/apache/fury/pull/2243),
[#2250](https://github.com/apache/fury/pull/2250), and
[#2256](https://github.com/apache/fury/pull/2256).
-#### Example: Interface Mapping with RowEncoder
+### Example: Interface Mapping with RowEncoder
```java
public interface Animal {
@@ -148,7 +146,7 @@ System.out.println(decoded.speak()); // Woof
```
-#### Example: Extension Type with RowEncoder
+### Example: Extension Type with RowEncoder
```java
public class Parent {
diff --git a/docs/guide/xlang_serialization_guide.md
b/docs/guide/xlang_serialization_guide.md
index 829b04f5..cb21f1f2 100644
--- a/docs/guide/xlang_serialization_guide.md
+++ b/docs/guide/xlang_serialization_guide.md
@@ -19,9 +19,7 @@ license: |
limitations under the License.
---
-## Cross-language object graph serialization
-
-### Serialize built-in types
+## Serialize built-in types
Common types can be serialized automatically: primitive numeric types, string,
binary, array, list, map and so on.
@@ -111,17 +109,17 @@ func main() {
**JavaScript**
```javascript
-import Fory from '@foryjs/fory';
+import Fory from "@foryjs/fory";
/**
* @foryjs/hps use v8's fast-calls-api that can be called directly by jit,
ensure that the version of Node is 20 or above.
* Experimental feature, installation success cannot be guaranteed at this
moment
* If you are unable to install the module, replace it with `const hps = null;`
**/
-import hps from '@foryjs/hps';
+import hps from "@foryjs/hps";
const fory = new Fory({ hps });
-const input = fory.serialize('hello fory');
+const input = fory.serialize("hello fory");
const result = fory.deserialize(input);
console.log(result);
```
@@ -140,7 +138,7 @@ fn run() {
}
```
-### Serialize custom types
+## Serialize custom types
Serializing user-defined types needs registering the custom type using the
register API to establish the mapping relationship between the type in
different languages.
@@ -330,22 +328,22 @@ func main() {
**JavaScript**
```javascript
-import Fory, { Type, InternalSerializerType } from '@foryjs/fory';
+import Fory, { Type, InternalSerializerType } from "@foryjs/fory";
/**
* @foryjs/hps use v8's fast-calls-api that can be called directly by jit,
ensure that the version of Node is 20 or above.
* Experimental feature, installation success cannot be guaranteed at this
moment
* If you are unable to install the module, replace it with `const hps = null;`
**/
-import hps from '@foryjs/hps';
+import hps from "@foryjs/hps";
// Now we describe data structures using JSON, but in the future, we will use
more ways.
-const description = Type.object('example.foo', {
+const description = Type.object("example.foo", {
foo: Type.string(),
});
const fory = new Fory({ hps });
const { serialize, deserialize } = fory.registerSerializer(description);
-const input = serialize({ foo: 'hello fory' });
+const input = serialize({ foo: "hello fory" });
const result = deserialize(input);
console.log(result);
```
@@ -409,7 +407,7 @@ fn complex_struct() {
}
```
-### Serialize Shared Reference and Circular Reference
+## Serialize Shared Reference and Circular Reference
Shared reference and circular reference can be serialized automatically, no
duplicate data or recursion error.
@@ -531,7 +529,7 @@ console.log(result.bar.foo === result.foo);
**JavaScript**
Reference cannot be implemented because of rust ownership restrictions
-### Zero-Copy Serialization
+## Zero-Copy Serialization
**Java**
diff --git a/docs/guide/xlang_type_mapping.md b/docs/guide/xlang_type_mapping.md
index 72781347..754c5ed7 100644
--- a/docs/guide/xlang_type_mapping.md
+++ b/docs/guide/xlang_type_mapping.md
@@ -28,7 +28,7 @@ Note:
## Type Mapping
| Fory Type | Fory Type ID | Java | Python
| Javascript | C++ | Golang
| Rust |
-|-------------------------|--------------|-----------------|-----------------------------------|-----------------|--------------------------------|------------------|------------------|
+| ----------------------- | ------------ | --------------- |
--------------------------------- | --------------- |
------------------------------ | ---------------- | ---------------- |
| bool | 1 | bool/Boolean | bool
| Boolean | bool | bool
| bool |
| int8 | 2 | byte/Byte | int/pyfory.Int8
| Type.int8() | int8_t | int8
| i8 |
| int16 | 3 | short/Short | int/pyfory.Int16
| Type.int16() | int16_t | int16
| i6 |
@@ -58,7 +58,7 @@ Note:
| decimal | 27 | BigDecimal | Decimal
| bigint | / | /
| / |
| binary | 28 | byte[] | bytes
| / | `uint8_t[n]/vector<T>` |
`[n]uint8/[]T` | `Vec<uint8_t>` |
| array | 29 | array | np.ndarray
| / | / |
array/slice | Vec |
-| bool_array | 30 | bool[] | ndarray(np.bool_)
| / | `bool[n]` |
`[n]bool/[]T` | `Vec<bool>` |
+| bool_array | 30 | bool[] |
ndarray(np.bool\_) | / | `bool[n]`
| `[n]bool/[]T` | `Vec<bool>` |
| int8_array | 31 | byte[] | ndarray(int8)
| / | `int8_t[n]/vector<T>` |
`[n]int8/[]T` | `Vec<i18>` |
| int16_array | 32 | short[] | ndarray(int16)
| / | `int16_t[n]/vector<T>` |
`[n]int16/[]T` | `Vec<i16>` |
| int32_array | 33 | int[] | ndarray(int32)
| / | `int32_t[n]/vector<T>` |
`[n]int32/[]T` | `Vec<i32>` |
@@ -92,21 +92,21 @@ Here is en example:
- Java:
- ```java
- class Foo {
- @Int32Type(varint = true)
- int f1;
- List<@Int32Type(varint = true) Integer> f2;
- }
- ```
+ ```java
+ class Foo {
+ @Int32Type(varint = true)
+ int f1;
+ List<@Int32Type(varint = true) Integer> f2;
+ }
+ ```
- Python:
- ```python
- class Foo:
- f1: Int32Type(varint=True)
- f2: List[Int32Type(varint=True)]
- ```
+ ```python
+ class Foo:
+ f1: Int32Type(varint=True)
+ f2: List[Int32Type(varint=True)]
+ ```
## Type wrapper
diff --git a/docs/specification/java_serialization_spec.md
b/docs/specification/java_serialization_spec.md
index 469300bb..3a8d4bbe 100644
--- a/docs/specification/java_serialization_spec.md
+++ b/docs/specification/java_serialization_spec.md
@@ -66,7 +66,7 @@ corresponding flags and maintaining internal state.
Reference flags:
| Flag | Byte Value | Description
|
-|---------------------|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ------------------- | ---------- |
-------------------------------------------------------------------------------------------------------------------------------------------------------
|
| NULL FLAG | `-3` | This flag indicates the object is a null
value. We don't use another byte to indicate REF, so that we can save one byte.
|
| REF FLAG | `-2` | This flag indicates the object is already
serialized previously, and fory will write a ref id with unsigned varint format
instead of serialize it again |
| NOT_NULL VALUE FLAG | `-1` | This flag indicates the object is a
non-null value and fory doesn't track ref for this type of object.
|
@@ -92,15 +92,15 @@ If schema consistent mode is enabled globally or enabled
for current class, clas
- If class is not registered:
- If class is not an array, fory will write one byte `0bxxxxxxx1` first,
then write class name.
- The first little bit is `1`, which is different from first bit `0` of
- encoded class id. Fory can use this information to determine whether
to read class by class id for
- deserialization.
+ encoded class id. Fory can use this information to determine whether to
read class by class id for
+ deserialization.
- If class is not registered and class is an array, fory will write one byte
`dimensions << 1 | 1` first, then write
- component
- class subsequently. This can reduce array class name cost if component
class is or will be serialized.
+ component
+ class subsequently. This can reduce array class name cost if component
class is or will be serialized.
- Class will be written as two enumerated fory unsigned by default: `package
name` and `class name`. If meta share
- mode is
- enabled,
- class will be written as an unsigned varint which points to index in
`MetaContext`.
+ mode is
+ enabled,
+ class will be written as an unsigned varint which points to index in
`MetaContext`.
### Schema evolution
@@ -162,45 +162,45 @@ Meta header is a 64 bits number value encoded in little
endian order.
- num fields: encode `num fields << 1 | register flag(1 when class
registered)` as unsigned varint.
- If class is registered, then an unsigned varint class id will be written
next, package and class name will be
- omitted.
+ omitted.
- If current class is schema consistent, then num field will be `0` to flag
it.
- If current class isn't schema consistent, then num field will be the
number of compatible fields. For example,
- users
- can use tag id to mark some field as compatible field in schema
consistent context. In such cases, schema
- consistent
- fields will be serialized first, then compatible fields will be
serialized next. At deserialization, Fory will use
- fields info of those fields which aren't annotated by tag id for
deserializing schema consistent fields, then use
- fields info in meta for deserializing compatible fields.
+ users
+ can use tag id to mark some field as compatible field in schema consistent
context. In such cases, schema
+ consistent
+ fields will be serialized first, then compatible fields will be serialized
next. At deserialization, Fory will use
+ fields info of those fields which aren't annotated by tag id for
deserializing schema consistent fields, then use
+ fields info in meta for deserializing compatible fields.
- Package name encoding(omitted when class is registered):
- encoding algorithm: `UTF8/ALL_TO_LOWER_SPECIAL/LOWER_UPPER_DIGIT_SPECIAL`
- - Header: `6 bits size | 2 bits encoding flags`. The `6 bits size: 0~63`
will be used to indicate size `0~63`,
- the value `63` the size need more byte to read, the encoding will encode
`size - 63` as a varint next.
+ - Header: `6 bits size | 2 bits encoding flags`. The `6 bits size: 0~63`
will be used to indicate size `0~63`,
+ the value `63` the size need more byte to read, the encoding will encode
`size - 63` as a varint next.
- Class name encoding(omitted when class is registered):
- encoding algorithm:
`UTF8/LOWER_UPPER_DIGIT_SPECIAL/FIRST_TO_LOWER_SPECIAL/ALL_TO_LOWER_SPECIAL`
- - header: `6 bits size | 2 bits encoding flags`. The `6 bits size: 0~63`
will be used to indicate size `0~63`,
- the value `63` the size need more byte to read, the encoding will encode
`size - 63` as a varint next.
+ - header: `6 bits size | 2 bits encoding flags`. The `6 bits size: 0~63`
will be used to indicate size `0~63`,
+ the value `63` the size need more byte to read, the encoding will encode
`size - 63` as a varint next.
- Field info:
- header(8
- bits): `3 bits size + 2 bits field name encoding + polymorphism flag +
nullability flag + ref tracking flag`.
- Users can use annotation to provide those info.
+ bits): `3 bits size + 2 bits field name encoding + polymorphism flag +
nullability flag + ref tracking flag`.
+ Users can use annotation to provide those info.
- 2 bits field name encoding:
- encoding: `UTF8/ALL_TO_LOWER_SPECIAL/LOWER_UPPER_DIGIT_SPECIAL/TAG_ID`
- If tag id is used, i.e. field name is written by an unsigned varint
tag id. 2 bits encoding will be `11`.
- size of field name:
- - The `3 bits size: 0~7` will be used to indicate length `1~7`, the
value `6` the size read more bytes,
- the encoding will encode `size - 7` as a varint next.
+ - The `3 bits size: 0~7` will be used to indicate length `1~7`, the
value `6` the size read more bytes,
+ the encoding will encode `size - 7` as a varint next.
- If encoding is `TAG_ID`, then num_bytes of field name will be used to
store tag id.
- ref tracking: when set to 1, ref tracking will be enabled for this field.
- nullability: when set to 1, this field can be null.
- polymorphism: when set to 1, the actual type of field will be the
declared field type even the type if
- not `final`.
+ not `final`.
- type id:
- For registered type-consistent classes, it will be the registered class
id.
- Otherwise it will be encoded as `OBJECT_ID` if it isn't `final` and
`FINAL_OBJECT_ID` if it's `final`. The
- meta for such types is written separately instead of inlining here
is to reduce meta space cost if object of
- this type is serialized in current object graph multiple times, and
the field value may be null too.
+ meta for such types is written separately instead of inlining here is to
reduce meta space cost if object of
+ this type is serialized in current object graph multiple times, and the
field value may be null too.
- Field name: If type id is set, type id will be used instead. Otherwise
meta string encoding length and data will
- be written instead.
+ be written instead.
Field order are left as implementation details, which is not exposed to
specification, the deserialization need to
resort fields based on Fory field comparator. In this way, fory can compute
statistics for field names or types and
@@ -215,9 +215,9 @@ Same encoding algorithm as the previous layer except:
- If package name has been written before: `varint index + sharing
flag(set)` will be written
- If package name hasn't been written before:
- If meta string encoding is `LOWER_SPECIAL` and the length of encoded
string `<=` 64, then header will be
- `6 bits size + encoding flag(set) + sharing flag(unset)`.
+ `6 bits size + encoding flag(set) + sharing flag(unset)`.
- Otherwise, header will
- be `3 bits unset + 3 bits encoding flags + encoding flag(unset)
+ sharing flag(unset)`
+ be `3 bits unset + 3 bits encoding flags + encoding flag(unset) +
sharing flag(unset)`
## Meta String
@@ -227,16 +227,16 @@ Meta string is mainly used to encode meta strings such as
class name and field n
String binary encoding algorithm:
-| Algorithm | Pattern | Description
|
-|---------------------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| LOWER_SPECIAL | `a-z._$\|` | every char is written using 5
bits, `a-z`: `0b00000~0b11001`, `._$\|`: `0b11010~0b11101`, prepend one bit at
the start to indicate whether strip last char since last byte may have 7
redundant bits(1 indicates strip last char)
|
-| LOWER_UPPER_DIGIT_SPECIAL | `a-zA-Z0~9._` | every char is written using 6
bits, `a-z`: `0b00000~0b11001`, `A-Z`: `0b11010~0b110011`, `0~9`:
`0b110100~0b111101`, `._`: `0b111110~0b111111`, prepend one bit at the start
to indicate whether strip last char since last byte may have 7 redundant bits(1
indicates strip last char) |
-| UTF-8 | any chars | UTF-8 encoding
|
+| Algorithm | Pattern | Description
|
+| ------------------------- | ------------- |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| LOWER_SPECIAL | `a-z._$\|` | every char is written using 5
bits, `a-z`: `0b00000~0b11001`, `._$\|`: `0b11010~0b11101`, prepend one bit at
the start to indicate whether strip last char since last byte may have 7
redundant bits(1 indicates strip last char)
|
+| LOWER_UPPER_DIGIT_SPECIAL | `a-zA-Z0~9._` | every char is written using 6
bits, `a-z`: `0b00000~0b11001`, `A-Z`: `0b11010~0b110011`, `0~9`:
`0b110100~0b111101`, `._`: `0b111110~0b111111`, prepend one bit at the start to
indicate whether strip last char since last byte may have 7 redundant bits(1
indicates strip last char) |
+| UTF-8 | any chars | UTF-8 encoding
|
Encoding flags:
| Encoding Flag | Pattern
| Encoding Algorithm
|
-|---------------------------|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ------------------------- |
------------------------------------------------------------- |
-----------------------------------------------------------------------------------------------------------------------------------------------------------
|
| LOWER_SPECIAL | every char is in `a-z._$\|`
| `LOWER_SPECIAL`
|
| FIRST_TO_LOWER_SPECIAL | every char is in `a-z[c1,c2]` except first char
is upper case | replace first upper case char to lower case, then use
`LOWER_SPECIAL`
|
| ALL_TO_LOWER_SPECIAL | every char is in `a-zA-Z[c1,c2]`
| replace every upper case char by `\|` + `lower case`, then use
`LOWER_SPECIAL`, use this encoding if it's smaller than Encoding
`LOWER_UPPER_DIGIT_SPECIAL` |
@@ -324,7 +324,7 @@ If string has been written before, the data will be written
as follows:
- size: 1~9 byte
- Fory PVL(Progressive Variable-length Long) Encoding:
- positive long format: first bit in every byte indicates whether to have
the next byte. If first bit is set
- i.e. `b & 0x80 == 0x80`, then the next byte should be read until the
first bit is unset.
+ i.e. `b & 0x80 == 0x80`, then the next byte should be read until the first
bit is unset.
#### Signed long
@@ -334,7 +334,7 @@ If string has been written before, the data will be written
as follows:
- Otherwise write as 9 bytes: `| 0b1 | little-endian 8 bytes long |`
- Fory PVL(Progressive Variable-length Long) Encoding:
- First convert the number into positive unsigned long by `(v << 1) ^ (v >>
63)` ZigZag algorithm to reduce cost of
- small negative numbers, then encoding it as an unsigned long.
+ small negative numbers, then encoding it as an unsigned long.
#### Float
diff --git a/docs/specification/xlang_serialization_spec.md
b/docs/specification/xlang_serialization_spec.md
index aeaa0f8d..debfaf92 100644
--- a/docs/specification/xlang_serialization_spec.md
+++ b/docs/specification/xlang_serialization_spec.md
@@ -191,7 +191,7 @@ corresponding flags and maintaining internal state.
Reference flags:
| Flag | Byte Value | Description
|
-|---------------------|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ------------------- | ---------- |
-------------------------------------------------------------------------------------------------------------------------------------------------------
|
| NULL FLAG | `-3` | This flag indicates the object is a null
value. We don't use another byte to indicate REF, so that we can save one byte.
|
| REF FLAG | `-2` | This flag indicates the object is already
serialized previously, and fory will write a ref id with unsigned varint format
instead of serialize it again |
| NOT_NULL VALUE FLAG | `-1` | This flag indicates the object is a
non-null value and fory doesn't track ref for this type of object.
|
@@ -243,7 +243,7 @@ differently.
- If schema evolution mode is enabled globally when creating fory, and current
class is configured to use schema
consistent mode like `struct` vs `table` in flatbuffers:
- Type meta will be add to `captured_type_defs`: `captured_type_defs[type
def stub] = map size` ahead when
- registering type.
+ registering type.
- Get index of the meta in `captured_type_defs`, write that index as `|
unsigned varint: index |`.
### Struct Schema evolution
@@ -252,10 +252,12 @@ If schema evolution mode is enabled globally when
creating fory, and enabled for
using one of the following mode. Which mode to use is configured when creating
fory.
- Normal mode(meta share not enabled):
+
- If type meta hasn't been written before, add `type def`
- to `captured_type_defs`: `captured_type_defs[type def] = map size`.
+ to `captured_type_defs`: `captured_type_defs[type def] = map size`.
- Get index of the meta in `captured_type_defs`, write that index as `|
unsigned varint: index |`.
- After finished the serialization of the object graph, fory will start to
write `captured_type_defs`:
+
- Firstly, set current to `meta start offset` of fory header
- Then write `captured_type_defs` one by one:
@@ -270,31 +272,33 @@ using one of the following mode. Which mode to use is
configured when creating f
- Meta share mode: the writing steps are same as the normal mode, but
`captured_type_defs` will be shared across
multiple serializations of different objects. For example, suppose we have a
batch to serialize:
- ```python
- captured_type_defs = {}
- stream = ...
- # add `Type1` to `captured_type_defs` and write `Type1`
- fory.serialize(stream, [Type1()])
- # add `Type2` to `captured_type_defs` and write `Type2`, `Type1` is
written before.
- fory.serialize(stream, [Type1(), Type2()])
- # `Type1` and `Type2` are written before, no need to write meta.
- fory.serialize(stream, [Type1(), Type2()])
- ```
+ ```python
+ captured_type_defs = {}
+ stream = ...
+ # add `Type1` to `captured_type_defs` and write `Type1`
+ fory.serialize(stream, [Type1()])
+ # add `Type2` to `captured_type_defs` and write `Type2`, `Type1` is written
before.
+ fory.serialize(stream, [Type1(), Type2()])
+ # `Type1` and `Type2` are written before, no need to write meta.
+ fory.serialize(stream, [Type1(), Type2()])
+ ```
- Streaming mode(streaming mode doesn't support meta share):
+
- If type meta hasn't been written before, the data will be written as:
- ```
- | unsigned varint: 0b11111111 | type def |
- ```
+ ```
+ | unsigned varint: 0b11111111 | type def |
+ ```
- If type meta has been written before, the data will be written as:
- ```
- | unsigned varint: written index << 1 |
- ```
+ ```
+ | unsigned varint: written index << 1 |
+ ```
+
+ `written index` is the id in `captured_type_defs`.
- `written index` is the id in `captured_type_defs`.
- With this mode, `meta start offset` can be omitted.
> The normal mode and meta share mode will forbid streaming writing since it
> needs to look back for update the start
@@ -365,8 +369,8 @@ Detailed spec:
- encoding: `UTF8/ALL_TO_LOWER_SPECIAL/LOWER_UPPER_DIGIT_SPECIAL/TAG_ID`
- If tag id is used, field name will be written by an unsigned varint tag
id, and 2 bits encoding will be `11`.
- size of field name:
- - The `4 bits size: 0~14` will be used to indicate length `1~15`, the value
`15` indicates to read more bytes,
- the encoding will encode `size - 15` as a varint next.
+ - The `4 bits size: 0~14` will be used to indicate length `1~15`, the value
`15` indicates to read more bytes,
+ the encoding will encode `size - 15` as a varint next.
- If encoding is `TAG_ID`, then num_bytes of field name will be used to
store tag id.
- ref tracking: when set to 1, ref tracking will be enabled for this field.
- nullability: when set to 1, this field can be null.
@@ -411,7 +415,7 @@ List/Set/Map nested type spec:
###### Field Name
-If tag id is set, tag id will be used instead. Otherwise meta string of field
name will be written instead.
+If tag id is set, tag id will be used instead. Otherwise meta string of field
name will be written instead.
###### Field order
@@ -468,16 +472,16 @@ Meta string is mainly used to encode meta strings such as
field names.
String binary encoding algorithm:
-| Algorithm | Pattern | Description
|
-|---------------------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| LOWER_SPECIAL | `a-z._$\|` | every char is written using 5
bits, `a-z`: `0b00000~0b11001`, `._$\|`: `0b11010~0b11101`, prepend one bit at
the start to indicate whether strip last char since last byte may have 7
redundant bits(1 indicates strip last char)
|
-| LOWER_UPPER_DIGIT_SPECIAL | `a-zA-Z0~9._` | every char is written using 6
bits, `a-z`: `0b00000~0b11001`, `A-Z`: `0b11010~0b110011`, `0~9`:
`0b110100~0b111101`, `._`: `0b111110~0b111111`, prepend one bit at the start
to indicate whether strip last char since last byte may have 7 redundant bits(1
indicates strip last char) |
-| UTF-8 | any chars | UTF-8 encoding
|
+| Algorithm | Pattern | Description
|
+| ------------------------- | ------------- |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| LOWER_SPECIAL | `a-z._$\|` | every char is written using 5
bits, `a-z`: `0b00000~0b11001`, `._$\|`: `0b11010~0b11101`, prepend one bit at
the start to indicate whether strip last char since last byte may have 7
redundant bits(1 indicates strip last char)
|
+| LOWER_UPPER_DIGIT_SPECIAL | `a-zA-Z0~9._` | every char is written using 6
bits, `a-z`: `0b00000~0b11001`, `A-Z`: `0b11010~0b110011`, `0~9`:
`0b110100~0b111101`, `._`: `0b111110~0b111111`, prepend one bit at the start to
indicate whether strip last char since last byte may have 7 redundant bits(1
indicates strip last char) |
+| UTF-8 | any chars | UTF-8 encoding
|
Encoding flags:
| Encoding Flag | Pattern
| Encoding Algorithm
|
-|---------------------------|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ------------------------- |
-------------------------------------------------------- |
-----------------------------------------------------------------------------------------------------------------------------------------------------------
|
| LOWER_SPECIAL | every char is in `a-z._\|`
| `LOWER_SPECIAL`
|
| FIRST_TO_LOWER_SPECIAL | every char is in `a-z._` except first char is
upper case | replace first upper case char to lower case, then use
`LOWER_SPECIAL`
|
| ALL_TO_LOWER_SPECIAL | every char is in `a-zA-Z._`
| replace every upper case char by `\|` + `lower case`, then use
`LOWER_SPECIAL`, use this encoding if it's smaller than Encoding
`LOWER_UPPER_DIGIT_SPECIAL` |
@@ -546,7 +550,7 @@ Notes:
- Otherwise write as 9 bytes: `| 0b1 | little-endian 8 bytes long |`
- Fory PVL(Progressive Variable-length Long) Encoding:
- positive long format: first bit in every byte indicates whether to have
the next byte. If first bit is set
- i.e. `b & 0x80 == 0x80`, then the next byte should be read until the
first bit is unset.
+ i.e. `b & 0x80 == 0x80`, then the next byte should be read until the first
bit is unset.
#### signed int64
@@ -561,7 +565,7 @@ Notes:
- Otherwise write as 9 bytes: `| 0b1 | little-endian 8 bytes long |`
- Fory PVL(Progressive Variable-length Long) Encoding:
- First convert the number into positive unsigned long by `(v << 1) ^ (v >>
63)` ZigZag algorithm to reduce cost of
- small negative numbers, then encoding it as an unsigned long.
+ small negative numbers, then encoding it as an unsigned long.
#### float32
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]