Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    GzipStream e ByteArrayStream

    Salve,
    sono nuovo del forum e non sono molto pratico della programmazione in particolare in materia java.
    Ho in input una stringa qualsiasi, io devo riuscire a comprimere questa stringa utilizzando GZIP e decomprimerla successivamente. Cercando di utilizzare le seguenti catene: GZIPOutputStream->ByteArrayOutputStream e GZIPInputStream->ByteArrayInputStream.
    Non sono riuscito nemmeno osservando altri progetti fatti i quali però non utilizzavano ByteArrayStream... Potete fornirmi un buon esempio dal quale posso trarre spunto?
    Vi ringrazio in anticipo del vostro aiuto
    Francesco

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: GzipStream e ByteArrayStream

    Originariamente inviato da muirto82
    Ho in input una stringa qualsiasi, io devo riuscire a comprimere questa stringa utilizzando GZIP e decomprimerla successivamente. Cercando di utilizzare le seguenti catene: GZIPOutputStream->ByteArrayOutputStream e GZIPInputStream->ByteArrayInputStream.
    Non sono riuscito nemmeno osservando altri progetti fatti i quali però non utilizzavano ByteArrayStream... Potete fornirmi un buon esempio dal quale posso trarre spunto?
    Innanzitutto parli di stringa ... quindi io intendo un String. La conversione da String a byte[] e viceversa è ovviamente possibile ma ... devi tenere presente il charset da usare. Come li vuoi/devi codificare i caratteri?? (es. UTF-8?)

    Poi comunque che cosa vuoi ottenere alla fine? Immagino vuoi ottenere un byte[] con i dati compressi.

    Esempio (minimale, ometto per brevità dichiarazioni, gestione eccezioni ecc...):

    codice:
    String s = "Hello World";
    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    GZIPOutputStream gzos = new GZIPOutputStream(baos);
    
    byte[] notCompressed = s.getBytes("UTF-8");
    
    gzos.write(notCompressed);
    gzos.close();
    
    byte[] compressed = baos.toByteArray();
    P.S. se la stringa iniziale è molto corta, come nell'esempio sopra, è tranquillamente possibile che il "compresso" sia più lungo del non compresso!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    grazie andbin dell'ottima risposta,
    diciamo che questa parte su per giù ero riuscito a farla, il problema è sulla decompressione...
    Io devo arrivare di nuovo a uno String dopo la fase di compressione.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da muirto82
    il problema è sulla decompressione...
    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.
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ok perfetto grazie dell'attenzione ancora, provo a fare come hai detto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.