thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Keh,Brian" <Brian....@Cerner.com>
Subject java thrift serialization/deserialization with inputstreams
Date Wed, 06 May 2015 20:59:19 GMT
Hello,

I currently have a use-case where I want to serialize multiple thrift objects (of the same
type and using the same TProtocol) and later on deserialize those bytes back into a collection
of thrift objects.  I found the TSerializer and TDeserializer classes in libthrift that handles
serializing and deserialization from a single thrift object to bytes or vice-versa but was
wondering if there was support for serializing/deserializing to an input/output stream?

I found a way to do it by using the TTransport and TProtocol classes directly in the example
below, but was wondering if this was the best way to do it or if there are other thrift apis
better suited for this kind of operation.

        SampleThrift thrift1 = // a thrift object
        SampleThrift thrift2 = // another thrift object of the same class as thrift1

        TSerializer serializer = new TSerializer(new TCompactProtocol.Factory());
        final ByteArrayOutputStream os = new ByteArrayOutputStream();
        final byte[] serialize1 = serializer.serialize(thrift1);
        os.write(serialize1);
        final byte[] serialize2 = serializer.serialize(thrift2);
        os.write(serialize2);
        final byte[] output = os.toByteArray();

        final TMemoryInputTransport transport = new TMemoryInputTransport(output);
        final TProtocol protocol = new TCompactProtocol.Factory().getProtocol(transport);
        boolean next = true;
        do {
            TBase read = new SampleThrift();
            read.read(protocol);
            System.out.println("read = " + read);
            // TODO add the object to a collection
            if (transport.getBytesRemainingInBuffer() <= 0) {
                next = false;
            }
        } while (next);


Thanks,
Brian

CONFIDENTIALITY NOTICE This message and any included attachments are from Cerner Corporation
and are intended only for the addressee. The information contained in this message is confidential
and may constitute inside or non-public information under international, federal, or state
securities laws. Unauthorized forwarding, printing, copying, distribution, or use of such
information is strictly prohibited and may be unlawful. If you are not the addressee, please
promptly delete this message and notify the sender of the delivery error by e-mail or you
may call Cerner's corporate offices in Kansas City, Missouri, U.S.A at (+1) (816)221-1024.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message