Quale ordine dovrei usare GzipOutputStream
e BufferedOutputStream
Per i flussi di oggetti, ho scoperto che avvolgendo il flusso tamponato intorno al torrente gzip sia per l'input e l'output era quasi sempre significativamente più veloce . Più piccoli sono gli oggetti, meglio è stato. Migliore o uguale in tutti i casi quindi nessun flusso bufferizzato.
ois = new ObjectInputStream(new BufferedInputStream(new GZIPInputStream(fis)));
oos = new ObjectOutputStream(new BufferedOutputStream(new GZIPOutputStream(fos)));
Tuttavia, per il testo e flussi di byte dritto, ho scoperto che si trattava di una scossa in su - con il flusso di gzip intorno al torrente tamponata essendo solo leggermente migliore. Ma meglio in tutti i casi quindi nessun flusso bufferizzato.
reader = new InputStreamReader(new GZIPInputStream(new BufferedInputStream(fis)));
writer = new OutputStreamWriter(new GZIPOutputStream(new BufferedOutputStream(fos)));
ho corse ogni versione 20 volte e tagliare la prima esecuzione e in media il resto. Ho anche provato buffered-gzip-buffered che era leggermente migliore per gli oggetti e peggio per il testo. Non ho giocato affatto con le dimensioni del buffer.
Per i flussi di oggetti, ho testato 2 file oggetto serializzati nei 10s di megabyte.Per il file più grande (38 MB), la lettura era più veloce dell'85% (0,7 contro 5,6 secondi), ma in realtà leggermente più lenta per la scrittura (5,9 contro 5,7 secondi). Questi oggetti avevano alcuni grandi array in essi che potevano significare più grandi scritture.
method crc date time compressed uncompressed ratio
defla eb338650 May 19 16:59 14027543 38366001 63.4%
Per il file più piccolo (18MB), è stato più veloce del 75% per la lettura (1,6 rispetto a 6,1 secondi) e il 40% più veloce per la scrittura (2,8 rispetto a 4,7 secondi). Conteneva un gran numero di piccoli oggetti.
method crc date time compressed uncompressed ratio
defla 92c9d529 May 19 16:56 6676006 17890857 62.7%
Per il lettore di testo/scrittore ho usato un file di testo csv 64mb. Il flusso gzip attorno al flusso bufferizzato era più veloce dell'11% per la lettura (950 contro 1070 millisecondi) e leggermente più veloce durante la scrittura (7,9 contro 8,1 secondi).
method crc date time compressed uncompressed ratio
defla c6b72e34 May 20 09:16 22560860 63465800 64.5%
"si vuole comprimere loro in modo da avvolgere BIS con un GIS" - GIS non comprime. Si decomprime. FWIW Sto faticando a capire il tuo punto generale nell'ultima parte della tua risposta. – bacar