All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.msgpack.MessagePack Maven / Gradle / Ivy

Go to download

MessagePack for Java is a binary-based efficient object serialization library in Java.

There is a newer version: 0.6.12
Show newest version
//
// MessagePack for Java
//
// Copyright (C) 2009-2011 FURUHASHI Sadayuki
//
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//        http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.
//
package org.msgpack;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.lang.reflect.Type;
import java.nio.ByteBuffer;
import org.msgpack.template.Template;
import org.msgpack.template.TemplateRegistry;
import org.msgpack.packer.Packer;
import org.msgpack.packer.BufferPacker;
import org.msgpack.packer.MessagePackPacker;
import org.msgpack.packer.MessagePackBufferPacker;
import org.msgpack.packer.Unconverter;
import org.msgpack.unpacker.Unpacker;
import org.msgpack.unpacker.BufferUnpacker;
import org.msgpack.unpacker.MessagePackUnpacker;
import org.msgpack.unpacker.MessagePackBufferUnpacker;
import org.msgpack.unpacker.Converter;
import org.msgpack.type.Value;

/**
 * 

* This is basic class to use MessagePack for Java. It creates serializers and * deserializers for objects of classes. *

* *

* See Quick * Start for Java on MessagePack wiki. *

* */ public class MessagePack { private TemplateRegistry registry; /** * * @since 0.6.0 */ public MessagePack() { registry = new TemplateRegistry(null); } /** * * @since 0.6.0 * @param msgpack */ public MessagePack(MessagePack msgpack) { registry = new TemplateRegistry(msgpack.registry); } protected MessagePack(TemplateRegistry registry) { this.registry = registry; } /** * * @since 0.6.0 * @param cl */ public void setClassLoader(final ClassLoader cl) { registry.setClassLoader(cl); } /** * Returns serializer that enables serializing objects into * {@link java.io.OutputStream} object. * * @since 0.6.0 * @param out * output stream * @return stream-based serializer */ public Packer createPacker(OutputStream out) { return new MessagePackPacker(this, out); } /** * Returns serializer that enables serializing objects into buffer. * * @since 0.6.0 * @return buffer-based serializer */ public BufferPacker createBufferPacker() { return new MessagePackBufferPacker(this); } /** * Returns serializer that enables serializing objects into buffer. * * @since 0.6.0 * @param bufferSize * initial size of buffer * @return buffer-based serializer */ public BufferPacker createBufferPacker(int bufferSize) { return new MessagePackBufferPacker(this, bufferSize); } /** * Returns deserializer that enables deserializing * {@link java.io.InputStream} object. * * @since 0.6.0 * @param in * input stream * @return stream-based deserializer */ public Unpacker createUnpacker(InputStream in) { return new MessagePackUnpacker(this, in); } /** * Returns empty deserializer that enables deserializing buffer. * * @since 0.6.0 * @return buffer-based deserializer */ public BufferUnpacker createBufferUnpacker() { return new MessagePackBufferUnpacker(this); } /** * Returns deserializer that enables deserializing buffer. * * @since 0.6.0 * @param bytes * input byte array * @return buffer-based deserializer */ public BufferUnpacker createBufferUnpacker(byte[] bytes) { return createBufferUnpacker().wrap(bytes); } /** * Returns deserializer that enables deserializing buffer. * * @since 0.6.0 * @param bytes * @param off * @param len * @return buffer-based deserializer */ public BufferUnpacker createBufferUnpacker(byte[] bytes, int off, int len) { return createBufferUnpacker().wrap(bytes, off, len); } /** * Returns deserializer that enables deserializing buffer. * * @since 0.6.0 * @param buffer * input {@link java.nio.ByteBuffer} object * @return buffer-based deserializer */ public BufferUnpacker createBufferUnpacker(ByteBuffer buffer) { return createBufferUnpacker().wrap(buffer); } /** * Serializes specified object. * * @since 0.6.0 * @param v * serialized object * @return output byte array * @throws IOException */ public byte[] write(T v) throws IOException { BufferPacker pk = createBufferPacker(); if (v == null) { pk.writeNil(); } else { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(v.getClass()); tmpl.write(pk, v); } return pk.toByteArray(); } /** * Serializes specified object. It allows serializing object by specified * template. * * @since 0.6.0 * @param v * @param template * @return * @throws IOException */ public byte[] write(T v, Template template) throws IOException { BufferPacker pk = createBufferPacker(); template.write(pk, v); return pk.toByteArray(); } /** * Serializes specified object to output stream. * * @since 0.6.0 * @param out * output stream * @param v * serialized object * @throws IOException */ public void write(OutputStream out, T v) throws IOException { Packer pk = createPacker(out); if (v == null) { pk.writeNil(); } else { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(v.getClass()); tmpl.write(pk, v); } } /** * Serializes object to output stream by specified template. * * @since 0.6.0 * @param out * output stream * @param v * serialized object * @param template * serializer/deserializer for the object * @throws IOException */ public void write(OutputStream out, T v, Template template) throws IOException { Packer pk = createPacker(out); template.write(pk, v); } /** * Serializes {@link org.msgpack.type.Value} object to byte array. * * @since 0.6.0 * @param v * serialized {@link org.msgpack.type.Value} object * @return output byte array * @throws IOException */ public byte[] write(Value v) throws IOException { // FIXME ValueTemplate should do this BufferPacker pk = createBufferPacker(); pk.write(v); return pk.toByteArray(); } /** * Deserializes specified byte array to {@link org.msgpack.type.Value} * object. * * @since 0.6.0 * @param bytes * input byte array * @return * @throws IOException */ public Value read(byte[] bytes) throws IOException { return read(bytes, 0, bytes.length); } /** * Deserializes byte array to {@link org.msgpack.type.Value} object. * * @since 0.6.0 * @param bytes * @param off * @param len * @return * @throws IOException */ public Value read(byte[] bytes, int off, int len) throws IOException { return createBufferUnpacker(bytes, off, len).readValue(); } /** * Deserializes {@link java.nio.ByteBuffer} object to * {@link org.msgpack.type.Value} object. * * @since 0.6.0 * @param buffer * input buffer * @return * @throws IOException */ public Value read(ByteBuffer buffer) throws IOException { return createBufferUnpacker(buffer).readValue(); } /** * Deserializes input stream to {@link org.msgpack.type.Value} object. * * @since 0.6.0 * @param in * input stream * @return deserialized {@link org.msgpack.type.Value} object * @throws IOException */ public Value read(InputStream in) throws IOException { return createUnpacker(in).readValue(); } /** * Deserializes byte array to object. * * @since 0.6.0 * @param bytes * input byte array * @param v * @return * @throws IOException */ public T read(byte[] bytes, T v) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(v.getClass()); return read(bytes, v, tmpl); } /** * Deserializes byte array to object according to template. * * @since 0.6.0 * @param bytes * input byte array * @param tmpl * template * @return * @throws IOException */ public T read(byte[] bytes, Template tmpl) throws IOException { return read(bytes, null, tmpl); } /** * Deserializes byte array to object of specified class. * * @since 0.6.0 * @param bytes * input byte array * @param c * @return * @throws IOException */ public T read(byte[] bytes, Class c) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(c); return read(bytes, null, tmpl); } /** * Deserializes byte array to object according to specified template. * * @since 0.6.0 * @param bytes * input byte array * @param v * @param tmpl * template * @return * @throws IOException */ public T read(byte[] bytes, T v, Template tmpl) throws IOException { BufferUnpacker u = createBufferUnpacker(bytes); return (T) tmpl.read(u, v); } /** * Deserializes buffer to object. * * @since 0.6.0 * @param b * input {@link java.nio.ByteBuffer} object * @param v * @return * @throws IOException */ public T read(ByteBuffer b, T v) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(v.getClass()); return read(b, v, tmpl); } /** * Deserializes buffer to object according to template. * * @since 0.6.0 * @param b * input buffer object * @param tmpl * @return * @throws IOException */ public T read(ByteBuffer b, Template tmpl) throws IOException { return read(b, null, tmpl); } /** * Deserializes buffer to object of specified class. * * @since 0.6.0 * @param b * @param c * @return * @throws IOException */ public T read(ByteBuffer b, Class c) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(c); return read(b, null, tmpl); } /** * Deserializes buffer to object according to template. * * @since 0.6.0 * @param b * input buffer object * @param v * @param tmpl * @return * @throws IOException */ public T read(ByteBuffer b, T v, Template tmpl) throws IOException { BufferUnpacker u = createBufferUnpacker(b); return tmpl.read(u, v); } /** * Deserializes input stream to object. * * @since 0.6.0 * @param in * input stream * @param v * @return * @throws IOException */ public T read(InputStream in, T v) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(v.getClass()); return read(in, v, tmpl); } /** * Deserializes input stream to object according to template. * * @since 0.6.0 * @param in * input stream * @param tmpl * @return * @throws IOException */ public T read(InputStream in, Template tmpl) throws IOException { return read(in, null, tmpl); } /** * Deserializes input stream to object of specified class. * * @since 0.6.0 * @param in * @param c * @return * @throws IOException */ public T read(InputStream in, Class c) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(c); return read(in, null, tmpl); } /** * Deserializes input stream to object according to template * * @since 0.6.0 * @param in * input stream * @param v * @param tmpl * @return * @throws IOException */ public T read(InputStream in, T v, Template tmpl) throws IOException { Unpacker u = createUnpacker(in); return tmpl.read(u, v); } /** * Converts specified {@link org.msgpack.type.Value} object to object. * * @since 0.6.0 * @param v * @param to * @return * @throws IOException */ public T convert(Value v, T to) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(to.getClass()); return tmpl.read(new Converter(this, v), to); } /** * Converts {@link org.msgpack.type.Value} object to object specified class. * * @since 0.6.0 * @param v * @param c * @return * @throws IOException */ public T convert(Value v, Class c) throws IOException { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(c); return tmpl.read(new Converter(this, v), null); } /** * Unconverts specified object to {@link org.msgpack.type.Value} object. * * @since 0.6.0 * @param v * @return * @throws IOException */ public Value unconvert(T v) throws IOException { Unconverter pk = new Unconverter(this); if (v == null) { pk.writeNil(); } else { @SuppressWarnings("unchecked") Template tmpl = registry.lookup(v.getClass()); tmpl.write(pk, v); } return pk.getResult(); } /** * Registers {@link org.msgpack.template.Template} object for objects of * specified class. Template object is a pair of serializer and * deserializer for object serialization. It is generated automatically. * * @since 0.6.0 * @param type */ public void register(Class type) { registry.register(type); } /** * Registers specified {@link org.msgpack.template.Template} object * associated by class. * * @see #register(Class) * @since 0.6.0 * @param type * @param template */ public void register(Class type, Template template) { registry.register(type, template); } /** * Unregisters {@link org.msgpack.template.Template} object for objects of * specified class. * * @since 0.6.0 * @param type * @return */ public boolean unregister(Class type) { return registry.unregister(type); } /** * Unregisters all {@link org.msgpack.template.Template} objects that have * been registered in advance. * * @since 0.6.0 */ public void unregister() { registry.unregister(); } /** * Looks up a {@link org.msgpack.template.Template} object, which is * serializer/deserializer associated by specified class. * * @since 0.6.0 * @param type * @return */ @SuppressWarnings("unchecked") public Template lookup(Class type) { return registry.lookup(type); } public Template lookup(Type type) { return registry.lookup(type); } private static final MessagePack globalMessagePack = new MessagePack(); /** * Serializes specified object and returns the byte array. * * @deprecated {@link MessagePack#write(Object)} * @param v * @return * @throws IOException */ @Deprecated public static byte[] pack(Object v) throws IOException { return globalMessagePack.write(v); } /** * Serializes specified object to output stream. * * @deprecated {@link MessagePack#write(OutputStream, Object)} * @param out * @param v * @throws IOException */ @Deprecated public static void pack(OutputStream out, Object v) throws IOException { globalMessagePack.write(out, v); } /** * Serializes object by specified template and return the byte array. * * @deprecated {@link MessagePack#write(Object, Template)} * @param v * @param template * @return * @throws IOException */ @Deprecated public static byte[] pack(T v, Template template) throws IOException { return globalMessagePack.write(v, template); } /** * Serializes object to output stream. The object is serialized by specified * template. * * @deprecated {@link MessagePack#write(OutputStream, Object, Template)} * @param out * @param v * @param template * @throws IOException */ @Deprecated public static void pack(OutputStream out, T v, Template template) throws IOException { globalMessagePack.write(out, v, template); } /** * Converts byte array to {@link org.msgpack.type.Value} object. * * @deprecated {@link MessagePack#read(byte[])} * @param bytes * @return * @throws IOException */ @Deprecated public static Value unpack(byte[] bytes) throws IOException { return globalMessagePack.read(bytes); } @Deprecated public static T unpack(byte[] bytes, Template template) throws IOException { BufferUnpacker u = new MessagePackBufferUnpacker(globalMessagePack).wrap(bytes); return template.read(u, null); } @Deprecated public static T unpack(byte[] bytes, Template template, T to) throws IOException { BufferUnpacker u = new MessagePackBufferUnpacker(globalMessagePack).wrap(bytes); return template.read(u, to); } /** * Deserializes byte array to object of specified class. * * @deprecated {@link MessagePack#read(byte[], Class)} * @param bytes * @param klass * @return * @throws IOException */ @Deprecated public static T unpack(byte[] bytes, Class klass) throws IOException { return globalMessagePack.read(bytes, klass); } /** * Deserializes byte array to object. * * @param bytes * @param to * @return * @throws IOException */ @Deprecated public static T unpack(byte[] bytes, T to) throws IOException { return globalMessagePack.read(bytes, to); } /** * Converts input stream to {@link org.msgpack.type.Value} object. * * @deprecated {@link MessagePack#read(InputStream)} * @param in * @return * @throws IOException */ @Deprecated public static Value unpack(InputStream in) throws IOException { return globalMessagePack.read(in); } /** * @deprecated * @param in * @param tmpl * @return * @throws IOException * @throws MessageTypeException */ @Deprecated public static T unpack(InputStream in, Template tmpl) throws IOException, MessageTypeException { return tmpl.read(new MessagePackUnpacker(globalMessagePack, in), null); } /** * @deprecated * @param in * @param tmpl * @param to * @return * @throws IOException * @throws MessageTypeException */ @Deprecated public static T unpack(InputStream in, Template tmpl, T to) throws IOException, MessageTypeException { return (T) tmpl.read(new MessagePackUnpacker(globalMessagePack, in), to); } /** * Deserializes input stream to object of specified class. * * @deprecated {@link MessagePack#read(InputStream, Class)} * @param in * @param klass * @return * @throws IOException */ @Deprecated public static T unpack(InputStream in, Class klass) throws IOException { return globalMessagePack.read(in, klass); } /** * Deserializes input stream to object. * * @deprecated {@link MessagePack#read(InputStream, Object)} * @param in * @param to * @return * @throws IOException */ @Deprecated public static T unpack(InputStream in, T to) throws IOException { return globalMessagePack.read(in, to); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy