Şu satırı dahil ederiz
import com.hazelcast.nio.serialization.StreamSerializer;
Kalıtım şöyle
Serializer
StreamSerializer
CompactStreamSerializer
PortableSerializer
Bazı sınıflar için hazır StreamSerializer'lar var. Bunlar şöyle
StreamSerializer
AbstractCollectionStreamSerializer
ArrayBlockingQueueStreamSerializer
ArrayDequeStreamSerializer
ArrayListStreamSerializer
ConcurrentSkipListSetStreamSerializer
CopyOnWriteArrayListStreamSerializer
CopyOnWriteArraySetStreamSerializer
DelayQueueStreamSerializer
HashSetStreamSerializer
LinkedBlockingQueueStreamSerializer
LinkedHashSetStreamSerializer
LinkedListStreamSerializer
LinkedTransferQueueStreamSerializer
PriorityBlockingQueueStreamSerializer
PriorityQueueStreamSerializer
SynchronousQueueStreamSerializer
TreeSetStreamSerializer
ObjectDataOutput arayüzünü gerçekleştiren sınıflardan birisi ObjectDataOutputStream.
ObjectDataOutputStream sınıfı kendi içinde java.io.DataOutputStream sınıfını kullanıyor. Dolayısıyla StreamSerializer kullanmak ne avantaj getiriyor anlamadım.
Örnek
Şöyle yaparız
import com.hazelcast.nio.ObjectDataInput; import com.hazelcast.nio.ObjectDataOutput; import com.hazelcast.nio.serialization.StreamSerializer; class CarStreamSerializer implements StreamSerializer<Car> { @Override public void write(ObjectDataOutput out, Car car) throws IOException { out.writeUTF(car.getName()); out.writeUTF(car.getNumber()); } @Override public Car read(ObjectDataInput in) throws IOException { return Car.builder() .name(in.readUTF()) .number(in.readUTF()) .build(); } @Override public int getTypeId() { return 1; } }
Bu serializer'ı Hazelcast'e göstermek için şöyle yaparız. setImplementation() ve setTypeClass() çağrıları yapılmalıdır
public Config createConfig() { Config config = new Config(); ... config.getSerializationConfig() .addSerializerConfig(serializerConfig()); return config; } SerializerConfig serializerConfig() { return new SerializerConfig() .setImplementation(new CarSerializer()) .setTypeClass(Car.class); }
Örnek
Elimizde şöyle bir kod olsun
import com.hazelcast.nio.ObjectDataInput; import com.hazelcast.nio.ObjectDataOutput; import com.hazelcast.nio.serialization.StreamSerializer; public class StudentSerializer implements StreamSerializer<Student> { @Override public void write(ObjectDataOutput out, Student object) throws IOException { out.writeString(object.getName()); out.writeLong(object.getPhoneNumber()); out.writeString(object.getAddress()); out.writeString(object.getSubject()); } @Override public Student read(ObjectDataInput in) throws IOException { return Student.builder() .name(in.readString()) .phoneNumber(in.readLong()) .address(in.readString()) .subject(in.readString()) .build(); } @Override public int getTypeId() { return 1; } }
Örnek
Şöyle yaparız. Burada hem member hem de client başlatılırken StudentSerializer nesnesinin nasıl konfigürasyona dahil edileceği gösteriliyor.
public Config createConfig() { Config config = new Config(); config.addMapConfig(mapConfig()); config.getSerializationConfig() .addSerializerConfig(serializerConfig()); return config; } private ClientConfig creatClientConfig() { ClientConfig clientConfig = new ClientConfig(); clientConfig.getSerializationConfig() .addSerializerConfig(serializerConfig()); return clientConfig; } private SerializerConfig serializerConfig() { return new SerializerConfig() .setImplementation(new StudentSerializer()) .setTypeClass(Student.class); }
Hiç yorum yok:
Yorum Gönder