Kryo (Serializable) Alternatifi

Java’da Serializable hakkında iyi şeyler düşünülmemektedir. Yavaş olduğu söylenmekte ve bir takım problemlere yol açmaktadır. Bu durumdan kurtulmak için Android Parceleble isminde bir yapı geliştirmiş ve kullanmaktadır. Kyro da bir başka alternatiftir. Kyro’nun kullanımı Parcelable kadar kolay değildir ancak hızı onunla yarışabilir düzeydedir.

Kulanımında bir takım ilginçlikler olmakla birlikte oldukça kullanılabilir gözükmektedir. Object okumu sırasında BufferUnderflow mesajı içeren bir exception fırlatması olsun oldukça ilginç bir araçtır.

Serializable ile farkları arasında en önemlisi programcı açısından ekstra işlem gerektirmesidir. Şöyleki kullanmadan önce Register etmeliyiz objelerimizi (String hariç) şöyleki:

Kryo kryo = new Kryo(); kryo.register(Seridegil.class); kryo.register(LocalDateTime.class);

Register ettikten sonra ise okunmasında ve yazılmasında çok büyük farklılıklar bulunmamaktadır output ve input stream içip okuyabilirsiniz ve tabi ki kryo’nun kendi output ve input classlarını kullanmanız da mantıklı olabilir. Şöyle bir örnek vermek gerekirse:

Output output = new Output(new FileOutputStream("file22.txt")); kryo.writeObject(output, seridegil); kryo.writeObject(output,"Anil Kaynar"); output.close();

Output kapatılmadığı zaman yazma işlemi gerçekleşmemektedir. close edildiği zaman flush işlemi yapılıyor (best practice).

Okurken çok büyük bir farklılık içermemektedir. Şöyleki:

Seridegil degil = kryo.readObject(input, Seridegil.class); String oyle=(String)kryo.readObject(input,String.class);

Okuma işleminde dikkat edeceğimiz husus ise boş constructor oluşturmaktır. Boş constructor oluşturulmadığı zaman çalışmamaktadır (Bu da bir klasiktir).

Kryo kullanılabilir bir Java kütüphanesidir. Projelerinizde kullanabilirsiniz. Tabi Android ortamında Parceleble kullanmak daha mantıklı olacaktır.

Originally published at anilkaynr.wordpress.com on July 11, 2018.

Computer Engineer,Sociologist, CSE Master Student

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store