2017-02-10 07:26:20 +01:00
|
|
|
Simple MessagePack
|
|
|
|
==================
|
2017-01-26 07:31:27 +01:00
|
|
|
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/ch.dissem.msgpack/msgpack/badge.svg)](https://maven-badges.herokuapp.com/maven-central/ch.dissem.msgpack/msgpack)
|
|
|
|
[![Javadoc](https://javadoc-emblem.rhcloud.com/doc/ch.dissem.msgpack/msgpack/badge.svg)](http://www.javadoc.io/doc/ch.dissem.msgpack/msgpack)
|
|
|
|
[![Apache 2](https://img.shields.io/badge/license-Apache_2.0-blue.svg)](https://raw.githubusercontent.com/Dissem/Jabit/master/LICENSE)
|
|
|
|
|
2017-09-21 16:25:03 +02:00
|
|
|
This is a simple Kotlin/Java library for handling MessagePack data. It doesn't do any object mapping, but maps to
|
|
|
|
special objects representing MessagePack types. To build, use command `./gradlew build`.
|
2017-01-26 07:31:27 +01:00
|
|
|
|
|
|
|
For most cases you might be better off using `org.msgpack:msgpack`, but I found that I needed something that generically
|
|
|
|
represents the internal structure of the data.
|
|
|
|
|
2017-09-21 16:25:03 +02:00
|
|
|
_Simple MessagePack_ uses Semantic Versioning, meaning as long as the major version doesn't change, nothing should break
|
|
|
|
if you update. Be aware though that this doesn't necessarily applies for SNAPSHOT builds and the development branch.
|
2017-01-26 07:31:27 +01:00
|
|
|
|
|
|
|
|
2017-01-27 08:40:52 +01:00
|
|
|
#### Master
|
2017-02-11 23:50:42 +01:00
|
|
|
[![Build Status](https://travis-ci.org/Dissem/Simple-MsgPack.svg?branch=master)](https://travis-ci.org/Dissem/Simple-MsgPack)
|
|
|
|
[![Code Quality](https://img.shields.io/codacy/4cd1f577c18d45dc9042aac5bc20b424/master.svg)](https://www.codacy.com/app/chrigu-meyer/Simple-MsgPack/dashboard?bid=4122049)
|
|
|
|
[![Test Coverage](https://codecov.io/github/Dissem/Simple-MsgPack/coverage.svg?branch=master)](https://codecov.io/github/Dissem/Simple-MsgPack?branch=master)
|
2017-01-27 08:40:52 +01:00
|
|
|
|
|
|
|
#### Develop
|
2017-02-11 23:50:42 +01:00
|
|
|
[![Build Status](https://travis-ci.org/Dissem/Simple-MsgPack.svg?branch=develop)](https://travis-ci.org/Dissem/Simple-MsgPack?branch=develop)
|
|
|
|
[![Code Quality](https://img.shields.io/codacy/4cd1f577c18d45dc9042aac5bc20b424/develop.svg)](https://www.codacy.com/app/chrigu-meyer/Simple-MsgPack/dashboard?bid=4118049)
|
|
|
|
[![Test Coverage](https://codecov.io/github/Dissem/Simple-MsgPack/coverage.svg?branch=develop)](https://codecov.io/github/Dissem/Simple-MsgPack?branch=develop)
|
2017-01-27 08:40:52 +01:00
|
|
|
|
2017-01-26 07:31:27 +01:00
|
|
|
Limitations
|
|
|
|
--------------
|
|
|
|
|
|
|
|
* There is no fallback to BigInteger for large integer type numbers, so there might be an integer overflow when reading
|
|
|
|
too large numbers
|
|
|
|
* `MPFloat` uses the data type you're using to decide on precision (float 32 or 64) - not the actual value. E.g. 0.5
|
|
|
|
could be saved perfectly as a float 42, but if you provide a double value, it will be stored as float 64, wasting
|
|
|
|
4 bytes.
|
2017-02-10 07:35:46 +01:00
|
|
|
* If you want to use the 'ext format family', you'll need to implement and register your own `MPType` and
|
2017-02-11 09:55:08 +01:00
|
|
|
`MPType.Unpacker`.
|
|
|
|
* Be aware that custom `MPType.Unpacker` take precedence over the default unpackers, i.e. if you accidentally define
|
2017-02-10 07:35:46 +01:00
|
|
|
your unpacker to handle strings, for example, you won't be able to unpack any regular strings anymore.
|
2017-01-26 07:31:27 +01:00
|
|
|
|
|
|
|
Setup
|
|
|
|
-----
|
|
|
|
|
|
|
|
Add msgpack as Gradle dependency:
|
|
|
|
```Gradle
|
|
|
|
compile "ch.dissem.msgpack:msgpack:1.0.0"
|
|
|
|
```
|
|
|
|
|
|
|
|
Usage
|
|
|
|
-----
|
|
|
|
|
|
|
|
### Serialize Data
|
|
|
|
|
|
|
|
First, you'll need to create some msgpack objects to serialize:
|
|
|
|
```Java
|
|
|
|
MPMap<MPString, MPType<?>> object = new MPMap<>();
|
|
|
|
object.put(new MPString("compact"), new MPBoolean(true));
|
|
|
|
object.put(new MPString("schema"), new MPInteger(0));
|
|
|
|
```
|
|
|
|
or the shorthand version for simple types:
|
|
|
|
```Java
|
|
|
|
import static ch.dissem.msgpack.types.Utils.mp;
|
|
|
|
|
|
|
|
MPMap<MPString, MPType<?>> object = new MPMap<>();
|
|
|
|
object.put(mp("compact"), mp(true));
|
|
|
|
object.put(mp("schema"), mp(0));
|
|
|
|
```
|
|
|
|
then just use `pack(OutputStream)`:
|
|
|
|
```Java
|
|
|
|
OutputStream out = ...;
|
|
|
|
object.pack(out);
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Deserialize Data
|
|
|
|
|
|
|
|
For deserializing data there is the reader object:
|
|
|
|
```Java
|
|
|
|
Reader reader = Reader.getInstance()
|
|
|
|
```
|
|
|
|
just use `reader.read(InputStream)`. Unfortunately you'll need to make sure you got what you expected, the following
|
|
|
|
example might result in `ClassCastException` at weird places:
|
|
|
|
```Java
|
|
|
|
InputStream in = ...;
|
|
|
|
MPType read = reader.read(in);
|
|
|
|
MPMap<MPString, MPString> map = (MPMap<MPString, MPString>) read;
|
|
|
|
String value = map.get(mp("key")).getValue();
|
2017-02-11 23:50:42 +01:00
|
|
|
```
|