/packer

Packer is a Simple Data Serializer for Java (like Kryo or native Serializable/Externalizable) but Zen-style

Primary LanguageJavaApache License 2.0Apache-2.0

packer

Simple Data Packer for Java (like Kryo,... but very simplified). Open Source Java project under Apache License v2.0

Current Stable Version is 1.1.2


DOC

Supported data types

  • Fixed length types:
    • byte, char, short, int, long, double, float
  • Variable length types (optimized space):
    • int, long, negative int, negative long
  • Complex types:
    • String and byte[] (using Variable Length Int or Fixed Int32 for sizes)
    • HexString
    • String Collection
    • String Map

Features

  • Compression (Deflate)
  • Encryption (AES/GCM/NoPadding; randomIV) java 8+ note-1
  • Encryption (AES/CBC/PKCS5Padding) note-1
    • Default IV
    • Shared IV
    • Random IV
    • Random Integer IV (compact IV)
  • Encryption (RSA/ECB/PKCS1Padding) note-1
  • CRC-8 (CRC-8 poly 0xD5)
  • Hash (MessageDigest)
  • HMAC (Mac)
  • Buffer AutoExtend
note-1: It is encouraged not to reuse instances of the Packer object when using encryption (IV are initialized only once).

Usage Example

import org.javastack.packer.Packer;

public class Example {
	public static void main(final String[] args) {
		// Sample usage (output):
		Packer p = new Packer(16);
		p.setAutoExtendPolicy(AutoExtendPolicy.AUTO);	// Enable AutoExtend
		p.useCompress(true);               				// Enable Compression
		p.useCRC(true);                    				// Enable CRC
		String s1 = "hello", s2 = "world";
		String hs = "df0c290eae2b";
		byte b = 42;
		long l = 0x648C9A7109B4L;
		int ni = -192813;
		p.putString(s1).putString(s2);
		p.putHexString(hs);
		p.putByte(b);
		p.putVLong(l);
		p.putVNegInt(ni);
		p.flip();
		String out = p.outputStringBase64URLSafe();
		System.out.println(out.length() + "\t" + out);

		// Sample usage (load):
		p = new Packer(16);
		p.setAutoExtendPolicy(AutoExtendPolicy.AUTO);	// Enable AutoExtend
		p.useCompress(true);               				// Enable Compression
		p.useCRC(true);                    				// Enable CRC
		p.loadStringBase64URLSafe(out);
		System.out.println(p.getString());
		System.out.println(p.getString());
		System.out.println(p.getHexStringUpper());
		System.out.println(p.getByte());
		System.out.println(p.getVLong());
		System.out.println(p.getVNegInt());
	}
}

MAVEN

Add the dependency to your pom.xml:

<dependency>
    <groupId>org.javastack</groupId>
    <artifactId>packer</artifactId>
    <version>1.1.2</version>
</dependency>

Benchmarks

TODO

Inspired in Kryo and Perl-Pack, this code is Java-minimalistic version.