Innanzitutto in un ByteBuffer ci puoi inserire solo byte (o altri tipi primitivi). È chiaro quindi che un oggetto, come un SocketAddress, non puoi "infilarcelo" dentro direttamente!Originariamente inviato da Azzurra85
Il mio problema è il seguente: devo inserire in un ByteBuffer un pacchetto contenente due SocketAddress,poi le infomazioni contenute nel ByteBuffer vengono inviate in un canale.
Una volta che da un canale (SocketChannel) recupero un ByteBuffer devo a questo punto estrarre le informazioni contenute nel buffer e quindi devo ricostruirmi i due SocketAddress..
come si può fare???
Una soluzione è serializzare gli oggetti, ottenere un byte[] e quindi creare un ByteBuffer dall'array. Infatti un ByteBuffer non è espandibile. La sua capacità viene impostata all'atto della creazione del ByteBuffer (tramite metodi statici) ed è fissa. E se serializzi un oggetto, però non sai a priori quanti byte verranno fuori.
Quindi potrei suggerire i seguenti passi:
- Si crea un ByteArrayOutputStream
- Si crea un ObjectOutputStream (che fa il "wrap" del ByteArrayOutputStream)
- Si scrive l'oggetto o gli oggetti sul ObjectOutputStream
- Si ottiene da ByteArrayOutputStream un array di byte con toByteArray()
- Si crea un ByteBuffer con il metodo statico wrap().