no me refiero a restar valor a su pregunta, pero ¿Es este realmente un buen punto de optimización en su programa? ¿Has verificado con un generador de perfiles que tienes un problema? Su pregunta tal como está formulada implica que no ha realizado ninguna investigación, sino que simplemente está adivinando que tendrá un problema de rendimiento o memoria al asignar un byte []. Dado que es probable que todas las respuestas en este hilo sean de algún tipo, realmente debes verificar que tengas un problema en antes de solucionarlo.
Volviendo a la pregunta, si quiere comprimir los datos "en su lugar" en un ByteBuffer, la respuesta es no, no hay capacidad para hacerlo en Java.
Si asigna el búfer como el siguiente:
byte[] bytes = getMyData();
ByteBuffer buf = ByteBuffer.wrap(bytes);
Puede filtrar su byte [] a través de un ByteBufferInputStream como la respuesta anterior sugiere.
La compresión sin sobrecarga es imposible. Los búferes directos son, por definición, _ "un contenedor para una cantidad fija de datos de un tipo primitivo específico" _. Una transformación como una compresión o cifrado debe realizarse fuera del búfer. –
entiendo. solo quiero hacer la compresión sin la penalidad adicional de copiar primero toda la matriz de búferes directos a una matriz de bytes Java – pdeva
GZIPInputStream no crea una copia: se transmite directamente desde el archivo (en función de verificar la fuente). Así que me imagino que probablemente sea más rápido que crear tu propio búfer directo y asignarle un archivo. Si realmente desea usar un búfer directo, podría escribir su propio InputStream que fluye desde su búfer ... –