2011-08-01 25 views
5

Bir temsilci işleviyle alınan byte[] dizilerini üreten bir soketten veri okumak için Naga kitaplığını kullanıyorum.Bayt dizisini farklı veri türlerine ayırma?

Sorum şu: Bu bayt dizisini hizalamayı bilerek belirli veri türlerine nasıl dönüştürebilirim? Örneğin

, bayt dizisi sırayla aşağıdaki verileri içeriyorsa:

| byte | byte | short | byte | int | int | 

nasıl (küçük endian olarak) bu veri tiplerini çıkarabilir?

cevap

8

ByteBuffer sınıfına bir göz atmanızı öneririm (özellikle ByteBuffer.wrap yöntemi ve çeşitli getXxx yöntemleri).

Örnek sınıfı:

class Packet { 

    byte field1; 
    byte field2; 
    short field3; 
    byte field4; 
    int field5; 
    int field6; 

    public Packet(byte[] data) { 
     ByteBuffer buf = ByteBuffer.wrap(data) 
            .order(ByteOrder.LITTLE_ENDIAN); 

     field1 = buf.get(); 
     field2 = buf.get(); 
     field3 = buf.getShort(); 
     field4 = buf.get(); 
     field5 = buf.getInt(); 
     field6 = buf.getInt(); 
    } 
} 
1

Bu ByteBuffer kullanılarak gerçekleştirilebilir ve ScatteringByteChannel şöyle olabilir:

 
ByteBuffer one = ByteBuffer.allocate(1); 
ByteBuffer two = ByteBuffer.allocate(1); 
ByteBuffer three = ByteBuffer.allocate(2); 
ByteBuffer four = ByteBuffer.allocate(1); 
ByteBuffer five = ByteBuffer.allocate(4); 
ByteBuffer six = ByteBuffer.allocate(4); 

ByteBuffer[] bufferArray = { one, two, three, four, five, six }; 
channel.read(bufferArray); 
İlgili konular