2014-09-18 11 views
6

Tek bir iletinin parçalarını içeren bir veya daha fazla ByteBuffer'ım var. Şimdi bu mesajı okumak istiyorum ancak N ByteBuffer'ı tek bir kopyaya kopyalamak istemiyorum. Ayrıştırıcım, eksiksiz bir iletiyle birlikte bir ByteBuffer bekler, ancak iletim N ByteBuffers'a bölünür.Kapağın altındaki çoklu arka plan ByteBuffers'ı birleştiren bir Java ByteBuffer uygulaması var mı?

bayt kopyalama olmadan tek birine bu N ByteBuffers birleştirmek için bir yol var mı? ByteBuffer tarafından kaput altında desteklenen ve ByteBuffer'a işaretçileri ve delegeleri ayarlayan ByteBuffer özet sınıfının bir tür akıllı uygulamasını hayal ettim. Ben, BM & F/Bovespa aşağıda protokolü kontrol etmenizi neden ihtiyaç halinde

sen merak ediyoruz. Mesajları parçalara ayırırlar ve farklı paketlerde sıraya girebilirler, başka bir deyişle, aynı mesaj dizisi her biri bir mesaj yığınıyla birden fazla paket halinde gelebilir. Aynı baytBuffer'a sıralı olarak yazamıyorum çünkü bu parçalar sıra dışı olabilir. Bu yığın protokolü aşağıda verilmiştir aynı ByteBuffer için sırayla yazmak için bir yolu yoktur gibi :(

Burada akıllı bir şey eksik? anlaşılıyor. :(

enter image description here enter image description here

+1

tek tampon içine hepsini birleştirmek istemiyorsanız, o zaman neden senin ayrıştırıcı tek ByteBuffer bekliyor? Kod mimarisi sorunu gibi görünüyor. – JLewkovich

+0

@JL Haklı olabilirsiniz ama sanmıyorum. Düzenlemeyi uygulamama çalıştığım protokolü dahil etmek için kontrol et. –

+0

Kesinlikle bir Java API'si sağlıyorlar mı? Bunların hepsini kendin yapmana gerek yok. Java için FIX API'leri kesinlikle diğer kaynaklardan edinilebilir. – EJP

cevap

-2

yapabilirsiniz zincir ByteBuffers birbirlerine, bir ByteBuffer dönen aşağıdaki gibi: Bu ayrıştırma yöntemine geçirilebilir tek ByteBuffer sonuçlanır

bba.append(bbb.toBytes()).append(bbc.toBytes()) 

0.

etkin bir kopyasını oluşturur, ancak bir şey atanmadıkça, bu GC için sıraya alınır.

sonra bir döngü içinde bunları eklemek, ByteBuffers Listesini kullanın ByteBuffers sayısını biliyor ve anında her biri eklemezseniz. Listeyi eklemeden önce sıralayabilirsiniz, böylece parçalar istediğiniz sırada görünür.

+0

Bu ek metodu 'ByteBuffer'da bulamıyorum javadoc. Söyleme yöntemini mi kastediyorsun? Var olsa bile, sadece baytları yeni bir ByteBuffer'a kopyalamak gibi görünüyor, değil mi? N ByteBuffers almak ve tüm verilerini yeni bir ByteBuffer kopyalamak için önemsiz ve pahalı bir çözümdür. Katılıyor musun? –

+0

Btw, oy kullanan kişi ben değildim. –

+0

http://download.oracle.com/otn_hosted_doc/jdeveloper/1012/jdev-doc/oracle/ide/util/ByteBuffer.html – CharlieS

0

Aradığın veri yapısının (en iyi bilgimle) Zincir Arabelleği olarak adlandırıldığını düşünüyorum. yapısının dışında düzenli Buffer gibi davranır iken Dahili olarak, bayt dizi veya tamponların dinamik büyüyen toplama (Java örneğin ArrayList) 'dir.

Performansla uğraşırsanız, bazı işlemlerin uygulanması tamamen önemsiz de olsa (örneğin belirli bir modelin konumunu ararken) oldukça kullanışlı olabilir.

Farkında olduğum tek genel Java uygulaması, NCHOVY tarafından Kraken numaralı telefondan ChainBuffer (artık muhafaza edilmemiş olsa da).

İlgili konular