📜  AVRO-通过生成类进行反序列化

📅  最后修改于: 2020-12-02 05:26:53             🧑  作者: Mango


如前所述,可以通过生成对应于该模式的类或使用解析器库将Avro模式读入程序。本章介绍如何通过生成类来读取架构以及如何使用Avro反序列化数据。

通过生成类进行反序列化

序列化的数据存储在文件emp.avro中。您可以使用Avro反序列化并阅读它。

序列化数据已存储

请按照下面给出的步骤从文件中反序列化序列化的数据。

第1步

使用SpecificDatumReader类创建DatumReader接口的对象。

DatumReaderempDatumReader = new SpecificDatumReader(emp.class);

第2步

emp类实例化DataFileReader 。此类从文件读取序列化的数据。它需要Dataumeader对象以及序列化数据所在的文件的路径,作为构造函数的参数。

DataFileReader dataFileReader = new DataFileReader(new File("/path/to/emp.avro"), empDatumReader);

第三步

使用DataFileReader的方法打印反序列化的数据。

  • 如果Reader中有任何元素,则hasNext()方法将返回一个布尔值。

  • DataFileReadernext()方法在Reader中返回数据。

while(dataFileReader.hasNext()){

   em=dataFileReader.next(em);
   System.out.println(em);
}

示例–通过生成类进行反序列化

以下完整程序显示了如何使用Avro反序列化文件中的数据。

import java.io.File;
import java.io.IOException;

import org.apache.avro.file.DataFileReader;
import org.apache.avro.io.DatumReader;
import org.apache.avro.specific.SpecificDatumReader;

public class Deserialize {
   public static void main(String args[]) throws IOException{
    
      //DeSerializing the objects
      DatumReader empDatumReader = new SpecificDatumReader(emp.class);
        
      //Instantiating DataFileReader
      DataFileReader dataFileReader = new DataFileReader(new
         File("/home/Hadoop/Avro_Work/with_code_genfile/emp.avro"), empDatumReader);
      emp em=null;
        
      while(dataFileReader.hasNext()){
      
         em=dataFileReader.next(em);
         System.out.println(em);
      }
   }
}

浏览到放置生成的代码的目录。在这种情况下,位于home / Hadoop / Avro_work / with_code_gen。

$ cd home/Hadoop/Avro_work/with_code_gen/

现在,将以上程序复制并保存到名为DeSerialize.java的文件中。如下所示编译并执行-

$ javac Deserialize.java
$ java Deserialize

输出

{"name": "omar", "id": 1, "salary": 30000, "age": 21, "address": "Hyderabad"}
{"name": "ram", "id": 2, "salary": 40000, "age": 30, "address": "Hyderabad"}
{"name": "robbin", "id": 3, "salary": 35000, "age": 25, "address": "Hyderabad"}