Zezeng Wang created AVRO-2570:
---------------------------------

             Summary: Code line doesn't match the code in Avro C++ Document
                 Key: AVRO-2570
                 URL: https://issues.apache.org/jira/browse/AVRO-2570
             Project: Apache Avro
          Issue Type: Improvement
          Components: c, doc
            Reporter: Zezeng Wang
            Assignee: Zezeng Wang


The description does not match the code in Avro C++ Document

The following is from Avro C++ Documentation:

*File: generated.cc*
 1
 19 #include "cpx.hh"
 20 #include "avro/Encoder.hh"
 21 #include "avro/Decoder.hh"
 22 
 23 
 24 int
 25 main()
 26 {
 {color:#FF0000}27{color}  std::unique_ptr<avro::OutputStream> out = 
avro::memoryOutputStream();
 {color:#FF0000}28{color}  avro::EncoderPtr e = avro::binaryEncoder();
 {color:#FF0000}29{color}  e->init(*out);
 30  c::cpx c1;
 {color:#FF0000}31{color}  c1.re = 1.0;
 32  c1.im = 2.13;
 33  avro::encode(*e, c1);
 34 
 35  std::unique_ptr<avro::InputStream> in = avro::memoryInputStream(*out);
 36  avro::DecoderPtr d = avro::binaryDecoder();
 37  d->init(*in);
 38 
 39  c::cpx c2;
 40  avro::decode(*d, c2);
 41  std::cout << '(' << c2.re << ", " << c2.im << ')' << std::endl;
 42  return 0;
 43 }
In {color:#ff0000}line 9{color}, we construct a memory output stream. By this 
we indicate that we want to send the encoded Avro data into memory. In 
{color:#ff0000}line 10{color}, we construct a binary encoder, whereby we mean 
the output should be encoded using the Avro binary standard. In 
{color:#ff0000}line 11{color}, we attach the output stream to the encoder. At 
any given time an encoder can write to only one output stream.

In {color:#ff0000}line 14,{color} we write the contents of c1 into the output 
stream using the encoder. Now the output stream contains the binary 
representation of the object. The rest of the code verifies that the data is 
indeed in the stream.

In {color:#ff0000}line 17{color}, we construct a memory input stream from the 
contents of the output stream. Thus the input stream has the binary 
representation of the object. In {color:#ff0000}line 1{color}8 and 19, we 
construct a binary decoder and attach the input stream to it. 
{color:#ff0000}Line 22{color} decodes the contents of the stream into another 
object c2. Now c1 and c2 should have identical contents, which one can readily 
verify from the output of the program, which should be:

(1, 2.13)

Now, if you want to encode the data using Avro JSON encoding, you should use 
[avro::jsonEncoder()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#a0847ef62f42f6f0d0af28da9f7c7cf15]
 instead of 
[avro::binaryEncoder()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#ad0158bd2fc76615b68db68d7e4f7c4f6]
 in {color:#ff0000}line 10{color} and 
[avro::jsonDecoder()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#a7ac8a9c93b0621227de3dcca383e36ff]
 instead of 
[avro::binaryDecoder()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#a04f78e53cb84a0189b626e6a5726b148]
 in {color:#ff0000}line 18{color}.

On the other hand, if you want to write the contents to a file instead of 
memory, you should use 
[avro::fileOutputStream()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#a164e34d709ba33d2464c295e7874f784]
 instead of 
[avro::memoryOutputStream()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#a0e961740e43d3f800220f03de11654e8]
 in {color:#ff0000}line 9{color} and 
[avro::fileInputStream()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#a1e5251d2ad9581e353399c1bac90c9fb]
 instead of 
[avro::memoryInputStream()|http://avro.apache.org/docs/current/api/cpp/html/namespaceavro.html#a98b7a8baaef11e477db89699ab27359b]
 in {color:#ff0000}line 17{color}.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to