2011-08-16 16 views
8

Java'nın yerel serileştirme işleminin yavaş olduğu bir proje üzerinde çalışıyorum, bu nedenle üstün performans için sınıflarda Externalize arabirimini kullanmaya devam etmek istiyoruz. Bununla birlikte, bu sınıfların birçok veri üyesi vardır ve bu iki yöntemi yazarken hata yapmanın kolay olduğunu fark ettik. Sınıfın bütün üyelerini sadece bu işlevlerde okuyor/yazıyoruz, hiçbir şey fantezi değil. Çevrimdışı bir işlemde veya derleme zamanında otomatik olarak dışlanmak için writeExternal() bloklarını oluşturmanın bir yolu var mı?Java Haricileştirilebilir readExternal()/writeExternal() bloklarını otomatik olarak oluştur

http://projectlombok.org/'a bir göz attım ve böyle bir şey ideal olurdu.

Benzer şekilde, bu sınıfları değişmez tutmak isteriz, ancak değişmez sınıflar dışsallaştırılabilir arabirimi uygulayamaz - proxy sınıfı modelini etkin java'dan kullanmak istiyoruz - oluşturulanın da yararlı olması gerekir.

cevap

1
Java'nın yerli seri

Ne kadar yavaş yavaş olduğu bir proje üzerinde çalışıyorum

? Niye ya? Çok sayıda el kodlaması ile daha hızlı hale getirilmesi, uzun vadede ekonomik olarak mümkün veya sürdürülemez gibi görünmektedir. Serileştirme ek yükleri gerçekten aktarımda zaman ve uzay sınırlarına inmelidir. Java'nın varsayılan serileştirmesinin, planladığınız tüm el kodlamalarının sonucundan daha yavaş olması için belirli bir neden yoktur. Nedenleri araştırmaktan daha iyi olursun. Örneğin iyi yerleştirilmiş bir BufferedOutputStream'in tüm sorunlarınızı çözebileceğini görebilirsiniz.

+1

Her zaman daha yavaş olacak olan serileştirme için çalışma zamanında yansıma kullanır. Farklı serileştirme yöntemlerini karşılaştırmak için http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking adresine bakın. – MrLebowski

+0

@MrLebowski Yansıma kullanımının farkındayım, ancak pratikte ağ ve disk bant genişliklerine gerçekten hükmediyor mu? ve bunu testlere dahil ettiler mi? ya da sadece ByteArrayOutputStreams için serileştirir misiniz? Tüm bunların tamamen akademik olduğunu da görebilirsiniz. – EJP

+0

Bunu işaretlediğiniz için teşekkürler. İstatistikleri buradan kontrol edin: http://pastebin.com/yi4JhhVb --- Bu nedenle, toplam serileştirme ile ilgili zaman artışı, dışsallaştırmadan seri hale getirilebilir hale getirme işleminin yalnızca 1 ms civarında olması - bu, ağ zamanındaki artışın kötü olmasıdır. Sıkıştırılmış akışı deniyorum ve yardımcı olup olmadığını görüyorum. Hala otomatikleştirilmiş dışlanabilir veya daha iyi otomatik seri hale getirme en iyi olacaktır. – MrLebowski

İlgili konular