2013-06-02 11 views
9

Ho una ByteBuffer che può contenere un massimo di (4 + size) bytes (cioè, un intero seguito da size caratteri). Tuttavia, il numero di caratteri scritti su ByteBuffer potrebbe essere inferiore a size.Determinare il numero di byte nel ByteBuffer

Quindi mi stavo chiedendo, c'è comunque da stabilire quanti caratteri sono stati scritti su ByteBuffer e non solo sulla dimensione totale di esso? limit, position e tali non sembrano essere ciò che sono dopo.

Grazie per il vostro aiuto!

+0

Che dire di 'hasRemaining'? –

+0

'hasRemaining' restituisce un valore booleano che indica se è rimasto qualcosa, non quanti byte rimangono. –

risposta

18

Dopo aver scritto su ByteBuffer, il numero di byte scritti può essere trovato con il metodo position().

Se si utilizza il buffer flip(), è possibile trovare il numero di byte nel buffer con i metodi limit() o remaining().

Se si legge un po 'del buffer, il numero di byte rimanenti può essere trovato con il metodo remaining().

+0

Grazie Andy. Forse il problema è che ho usato 'wrap' per copiare un' byte [] 'nel buffer? Questo è un problema con il mio uso delle funzioni che hai citato? Se è così, c'è un modo per leggere il numero effettivo di byte scritti nel byte [] '? Grazie per l'aiuto. –

+0

@Girl Non è possibile conoscere il numero effettivo di byte scritti, poiché 'ByteBuffer' è essenzialmente" cercabile ". Qual è il tuo modello di scrittura? Usi solo metodi di lettura/scrittura assoluti, metodi di lettura/scrittura relativi? – fge

+0

@ fge Sto essenzialmente leggendo da un 'DatagrampPacket'. So che la dimensione MAX dei contenuti all'interno di 'DatagramPacket' sarà' 4 + size'. Tuttavia, è possibile che il numero di caratteri dopo il 'int' possa essere inferiore a' size'. Quindi sto solo cercando di determinare quanti caratteri erano effettivamente nel 'DatagramPacket'. Grazie per l'assistenza. –

2
DatagramChannel channel = DatagramChannel.open(); 
ByteBuffer bb = ByteBuffer.allocate(5+size); 
channel.receive(bb); 
bb.flip(); 
// actual length of received packet 
int len = bb.remaining(); 
Problemi correlati