From: David Reiss Date: Sun, 2 Mar 2008 06:29:16 +0000 (+0000) Subject: Add a TDeserializer for Java. X-Git-Tag: 0.2.0~932 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=d2a3e566b7814cfe176dd988854f6b3dca6a47d7;p=common%2Fthrift.git 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 --- 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()); + } +} +