AVRO - Deserializacja przez generowanie klasy

Jak opisano wcześniej, schemat Avro można wczytać do programu, generując klasę odpowiadającą schematowi lub korzystając z biblioteki parserów. W tym rozdziale opisano, jak czytać schematby generating a class i Deserialize dane za pomocą Avro.

Deserializacja poprzez generowanie klasy

Zserializowane dane są przechowywane w pliku emp.avro. Możesz deserializować i czytać go za pomocą Avro.

Postępuj zgodnie z procedurą podaną poniżej, aby zdeserializować serializowane dane z pliku.

Krok 1

Utwórz obiekt DatumReader interfejs przy użyciu SpecificDatumReader klasa.

DatumReader<emp>empDatumReader = new SpecificDatumReader<emp>(emp.class);

Krok 2

Utwórz instancję DataFileReader dla empklasa. Ta klasa odczytuje serializowane dane z pliku. WymagaDataumeader obiekt i ścieżka do pliku, w którym istnieją serializowane dane, jako parametry konstruktora.

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

Krok 3

Wydrukuj zdeserializowane dane przy użyciu metod DataFileReader.

  • Plik hasNext() metoda zwróci wartość logiczną, jeśli w programie Reader znajdują się jakieś elementy.

  • Plik next() metoda DataFileReader zwraca dane w Czytniku.

while(dataFileReader.hasNext()){

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

Przykład - deserializacja przez generowanie klasy

Poniższy kompletny program pokazuje, jak deserializować dane w pliku przy użyciu 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<emp> empDatumReader = new SpecificDatumReader<emp>(emp.class);
		
      //Instantiating DataFileReader
      DataFileReader<emp> dataFileReader = new DataFileReader<emp>(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);
      }
   }
}

Przejdź do katalogu, w którym znajduje się wygenerowany kod. W tym przypadku o godzhome/Hadoop/Avro_work/with_code_gen.

$ cd home/Hadoop/Avro_work/with_code_gen/

Teraz skopiuj i zapisz powyższy program w pliku o nazwie DeSerialize.java. Skompiluj i wykonaj, jak pokazano poniżej -

$ javac Deserialize.java
$ java Deserialize

Wynik

{"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"}