Как сделать десериализацию kryo arraylist - PullRequest
0 голосов
/ 19 сентября 2019

Я новичок в сериализации kryo и хочу выполнить некоторую двоичную сериализацию и десериализацию с использованием списка массивов.

Это то, что я пробовал до сих пор.

Kryo2Simpan.java (Сериализация)

    public static void main(String[] args) {

        Kryo kryo = new Kryo();
        kryo.register(Mahasiswa.class);

        ArrayList<Mahasiswa> mahasiswas = new ArrayList<>();

        mahasiswas.add(new Mahasiswa("Tejo", "IT", "Yogyakarta", 1315004));
        mahasiswas.add(new Mahasiswa("Rizky", "IT", "Bandung", 1314031));
        mahasiswas.add(new Mahasiswa("Rosa", "IT", "Makassar", 1315009));
        mahasiswas.add(new Mahasiswa("Dani", "IT", "Cimahi", 1315016));

        try{
            Output output = new Output(new FileOutputStream("file"));
            kryo.writeObject(output, mahasiswas);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

и вот код десериализации

Kryo2Baca.Java (десериализация)

  public static void main(String[] args){
    SpringApplication.run(Kryo2Simpan.class, args);

    Kryo kryo = new Kryo();
    kryo.register(Mahasiswa.class);

    ArrayList<Mahasiswa> mahasiswas = new ArrayList<>();

    try {
      Input input = new Input(new FileInputStream("file"));

      kryo.readObject(input, Mahasiswa.class);
      input.close();

      for (Mahasiswa mahasiswa : mahasiswas){
        System.out.println(mahasiswa);
      }

    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }

РЕДАКТИРОВАТЬ: вот мой класс Mahasiswa


import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoSerializable;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Mahasiswa implements KryoSerializable
{
  private String nama, jurusan, alamat;
  private int nim;

  public Mahasiswa(String nama, String jurusan, String alamat, int nim) {
    this.nama = nama;
    this.jurusan = jurusan;
    this.alamat = alamat;
    this.nim = nim;
  }

  public Mahasiswa() {}

  public String getNama() {
    return nama;
  }

  public void setNama(String nama) {
    this.nama = nama;
  }

  public String getJurusan() {
    return jurusan;
  }

  public void setJurusan(String jurusan) {
    this.jurusan = jurusan;
  }

  public String getAlamat() {
    return alamat;
  }

  public void setAlamat(String alamat) {
    this.alamat = alamat;
  }

  public int getNim() {
    return nim;
  }

  public void setNim(int nim) {
    this.nim = nim;
  }

  @Override
  public String toString() {
    return "Mahasiswa{" +
            "nama= '" + getNama() + "'" +
            ", jurusan= '" + getJurusan() + "'" +
            ", alamat= '" + getAlamat() + "'" +
            ", nim= " + getNim() + "}";
  }

  @Override
  public void write(Kryo kryo, Output output) {
    output.writeString(nama);
    output.writeString(alamat);
    output.writeString(jurusan);
    output.writeInt(nim);
  }

  @Override
  public void read(Kryo kryo, Input input) {
    nama = input.readString();
    alamat = input.readString();
    jurusan = input.readString();
    nim = input.readInt();
}

Когда я запускаю класс сериализации, он работает хорошо, и я получил двоичный файл, но когда я хочу прочитать этот файл снова, он ничего не выводит,и когда я наводил курсор на mahasiswas, я получал ошибку Collection 'mahasiswas' is always empty.Что не так с моим кодом?Заранее спасибо.

...