From d2a3e566b7814cfe176dd988854f6b3dca6a47d7 Mon Sep 17 00:00:00 2001 From: David Reiss Date: Sun, 2 Mar 2008 06:29:16 +0000 Subject: [PATCH] Add a TDeserializer for Java. The class is the reverse of TSerializer. It allows you to deserialize a Thrift struct from a byte array (or String). git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665540 13f79535-47bb-0310-9956-ffa450edef68 --- lib/java/src/TDeserializer.java | 85 +++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 lib/java/src/TDeserializer.java diff --git a/lib/java/src/TDeserializer.java b/lib/java/src/TDeserializer.java new file mode 100644 index 00000000..f2a1ac28 --- /dev/null +++ b/lib/java/src/TDeserializer.java @@ -0,0 +1,85 @@ +// Copyright (c) 2006- Facebook +// Distributed under the Thrift Software License +// +// See accompanying file LICENSE or visit the Thrift site at: +// http://developers.facebook.com/thrift/ + +package com.facebook.thrift; + +import java.io.ByteArrayInputStream; +import java.io.UnsupportedEncodingException; + +import com.facebook.thrift.protocol.TBinaryProtocol; +import com.facebook.thrift.protocol.TProtocol; +import com.facebook.thrift.protocol.TProtocolFactory; +import com.facebook.thrift.transport.TIOStreamTransport; +import com.facebook.thrift.transport.TTransport; + +/** + * Generic utility for easily deserializing objects from a byte array or Java + * String. + * + * @author David Reiss + */ +public class TDeserializer { + private final TProtocolFactory protocolFactory_; + + /** + * Create a new TDeserializer that uses the TBinaryProtocol by default. + */ + public TDeserializer() { + this(new TBinaryProtocol.Factory()); + } + + /** + * Create a new TDeserializer. It will use the TProtocol specified by the + * factory that is passed in. + * + * @param protocolFactory Factory to create a protocol + */ + public TDeserializer(TProtocolFactory protocolFactory) { + protocolFactory_ = protocolFactory; + } + + /** + * Deserialize the Thrift object from a byte array. + * + * @param base The object to read into + * @param bytes The array to read from + */ + public void deserialize(TBase base, byte[] bytes) throws TException { + base.read( + protocolFactory_.getProtocol( + new TIOStreamTransport( + new ByteArrayInputStream(bytes)))); + } + + /** + * Deserialize the Thrift object from a Java string, using a specified + * character set for decoding. + * + * @param base The object to read into + * @param data The string to read from + * @param charset Valid JVM charset + */ + public void deserialize(TBase base, String data, String charset) throws TException { + try { + deserialize(base, data.getBytes(charset)); + } catch (UnsupportedEncodingException uex) { + throw new TException("JVM DOES NOT SUPPORT ENCODING: " + charset); + } + } + + /** + * Deerialize the Thrift object from a Java string, using the default JVM + * charset encoding. + * + * @param base The object to read into + * @param data The string to read from + * @return Serialized object as a String + */ + public void toString(TBase base, String data) throws TException { + deserialize(base, data.getBytes()); + } +} + -- 2.17.1