2014-04-15 36 views
6

Tôi đã tìm kiếm 2 giờ để tìm một ví dụ đơn giản howto sử dụng Kryo để sắp xếp một đối tượng và deserialize nó một lần nữa. Mỗi đoạn mã tôi tìm thấy không hoạt động/khớp.vui lòng cung cấp mẫu mã Kryo

Có mẫu/nguồn nào ở đó không, ví dụ: Kryo 2.23.0?

Trả lời

6

Cú pháp của Kryo tương đối giống với tuần tự hóa java. Một đối tượng kryo được tạo ra cũng như một đầu ra/đầu vào và một trong những phương pháp kryos được sử dụng để thực hiện các serialization/deserialisation

  • kryo.writeClassAndObject(output, object); //for if the concrete class isn't known (can be null)
  • kryo.writeObjectOrNull(output, someObject); //if the object could be null
  • kryo.writeObject(output, someObject); //can't be null and concrete class is known

Mỗi phòng trong số viết được ghép nối với một số đã đọc

  • SomeClass object = (SomeClass)kryo.readClassAndObject(input);
  • SomeClass someObject = kryo.readObjectOrNull(input, SomeClass.class);
  • SomeClass someObject = kryo.readObject(input, SomeClass.class);

Sau đây là một ví dụ sử dụng writeClassAndObject rằng serialises một Vector3d vào một tập tin và ngược lại.

public class KryoTest { 
    public static void main(String[] args){ 

     Vector3d someObject=new Vector3d(1,2,3); 

     //serialise object 

     //try-with-resources used to autoclose resources 
     try (Output output = new Output(new FileOutputStream("KryoTest.ser"))) { 
      Kryo kryo=new Kryo(); 
      kryo.writeClassAndObject(output, someObject); 
     } catch (FileNotFoundException ex) { 
      Logger.getLogger(KryTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     //deserialise object 

     Vector3d retrievedObject=null; 

     try (Input input = new Input(new FileInputStream("KryoTest.ser"))){ 
      Kryo kryo=new Kryo(); 
      retrievedObject=(Vector3d)kryo.readClassAndObject(input); 
     } catch (FileNotFoundException ex) { 
      Logger.getLogger(KryTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     System.out.println("Retrieved from file: " + retrievedObject.toString()); 
    } 
} 

Tất cả tài liệu cập nhật đã chuyển sang github ngay bây giờ; https://github.com/EsotericSoftware/kryo#quickstart

+0

Cần lưu ý rằng ví dụ này yêu cầu Java 7. –

3

Một phiên bản đơn giản:

Kryo kryo = new Kryo(); 
// #### Store to disk... 
Output output = new Output(new FileOutputStream("file.bin")); 
SomeClass someObject = ... 
kryo.writeObject(output, someObject); 
output.close(); 
// ### Restore from disk... 
Input input = new Input(new FileInputStream("file.bin")); 
SomeClass someObject = kryo.readObject(input, SomeClass.class); 
input.close(); 
Các vấn đề liên quan