Un ByteBuffer non può davvero funzionare in questo modo, poiché il suo concetto di design deve essere solo una vista di uno specifico array, a cui si può anche fare riferimento diretto. Non poteva provare a scambiare quell'array con un array più grande senza che si verifichino stranezze.
Quello che si desidera utilizzare è un DataOutput
. Il modo più conveniente è quello di utilizzare la libreria Guava (pre-release):
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.write(someBytes);
out.writeInt(someInt);
// ...
return out.toByteArray();
ma si potrebbe anche creare un DataOutputStream da un ByteArrayOutputStream manualmente, e solo affrontare le IOExceptions spuri da loro concatenamento in AssertionErrors.
fonte
2009-11-21 16:52:00
ByteArrayOutputStream è in realtà esattamente ciò che voglio (in realtà non sto facendo alcun I/O, ho solo qualche serializzazione complessa da fare). Grazie! – Seth
Seth, la tua affermazione della domanda ("putX") implicava che avresti bisogno di metodi come putInt, putDouble, ecc., Il che implicava che ByteArrayOutputStream non sarebbe stato sufficiente per te, quindi la mia risposta di ByteArrayDataOutput. –
Non ti chiederò nemmeno come il buf di dimensioni fisse sia esattamente quello che vuoi dopo aver chiesto un buf di dimensioni illimitate. Viviamo nel mondo in cui l'assurdo è una norma. – Val