Eh già .... perché se ci hai pensato, il byte[] con i dati compressi lo passi a un ByteArrayInputStream che poi passi ad un GZIPInputStream e fin qui sicuramente ci sei arrivato.Originariamente inviato da muirto82
il problema è sulla decompressione...
La questione è che tu non sai quanti byte aspettarti e da un GZIPInputStream puoi solo leggere come un normale InputStream cioè a singoli byte per volta o a blocchi di byte per volta.
E se non sai a priori la quantità di byte, non puoi nemmeno pensare di istanziare un byte[] di una certa lunghezza e poi usare la read(byte[]) per leggere tutto in un unico "colpo".
Per gestire la cosa in modo generico dovresti fare un ciclo di lettura in cui leggi un blocco di tot byte e poi li butti dentro un ByteArrayOutputStream. Alla fine da quest'ultimo ottieni un unico byte[] con il contenuto decompresso.
Ottenere un String è poi banale, sapendo a priori il charset usato nella fase di compressione.