Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
Zveřejnil壁 贺
1
Kontrola Dekorátory CheckedInputStream resp. CheckedOutputStream usnadňují kontolu nenarušenosti InputStreamu resp. OutputStreamu pomocí kontroního součtu, jenž implementuje interfejs Checksum. Balíček java.util.zip k tomu nabízí třídy CRC32 a Adler32, které počítají vlastně jen byty a pole bytů. CRC32 crc = new CRC32( ) ; // Cyclic Redundancy Check InputStream is = new … ; CheckedInputStream cis = new CheckedInputStream( is, crc ) ; … // reading cycle long checkValue = crc.getValue( ) ; obdobně pro output PJV05
2
Komprese a dekomprese dat
Proudy jsou konečné posloupnosti bytů či znaků jednosměrně čtených či psaných. Komprimovat lze jen proud bytů (znaky nutno vyjádřit jako byty). Deflater komprimuje ( zmenší, zahustí ) proud a Inflater dekomprimuje ( zveličí, zředí ) - do/z formátu zip, gzip anebo jar. I komprimovaný proud je jen posloupnost, která však popisuje stromovou souborovou strukturu pomocí Entry vyjadřující cestu k datům. Kompresi lze ovládat na úrovni proudu i specificky i pro každé Entry. - setMethod ( ZipOutputStream. ( DEFLATED | STORED ) ) - DEFLATED s event. užitím setLevel( 0 … 9 ) pro sílu komprese - STORED - uložení bez komprese dat – pro Entry však nutno dodat: setCrc( ) setSize( ) PJV05
3
java.util.zip java.util.jar
Input Stream Checked InputStream Output Stream Checked OutputStream Filter InputStream Deflater InputStream Filter OutputStream Inflater OutputStream Inflater InputStream Deflater OutputStream GZIP InputStream GZIP OutputStream Zip InputStream Zip OutputStream .jar .jar Jar InputStream Jar OutputStream PJV05
4
java.util.zip java.util.jar
java.lang Attributes Map Checksum AutoCloseable .jar java.io CRC32 Manifest Closeable Cloneable Adler32 .zip .zip ZipFile ZipEntry .jar .jar JarFile JarEntry .jar Pack200 ZipException JarException ZipError PJV05
5
Komprese OutputStream os = new FileOutputStream( "C:\\data.zip" );
ZipOutputStream zos = new ZipOutputStream( os ); // decorator ZipEntry ze1 = new ZipEntry( "dir1 \\ dir2 \\ YY" ); zos.putNextEntry( ze1 ); for ( int i = 0; i < 10000; i++ ) { zos.write( i ); } // 1. soubor ZipEntry ze2 = new ZipEntry( "dir1 \\ ZZ" ); zos.putNextEntry( ze2 ); for ( int i = 0; i < 10000; i++ ) { zos.write( i ); } // 2. soubor zos.close(); PJV05
6
Komprese Tzv. Deflater komprimuje proud do souborů typu .zip, .gzip nebo .jar. OutputStream os = new FileOutputStream( "C:\\data.zip" ); ZipOutputStream zos = new ZipOutputStream( os ); // decorator ZipEntry ze1 = new ZipEntry( "dir1 \\ dir2 \\ YY" ); zos.putNextEntry( ze1 ); for ( int i = 0; i < 10000; i++ ) { zos.write( i ); } ZipEntry ze2 = new ZipEntry( "dir1 \\ ZZ" ); zos.putNextEntry( ze2 ); zos.close(); Tzv. Inflater dekomprimuje soubory typu .zip, .gzip nebo .jar do proud. PJV05
7
Dekomprese InputStream is = new FileInputStream( "C:\\data.zip" );
ZipInputStream zis = new ZipInputStream( is ); // decorator ZipEntry ze; int i; while ( ( ze = zis.getNextEntry( ) ) != null ) { while ( ( i = zis.read( ) ) != -1 ) { System.out.print( i + " " ); } zis.close( ); PJV05
8
Dekomprese jar Ukázka jak vypsat balíčky API
String fn1 = "C:/Program Files/Java/jdk1.7.0_25/jre/lib/rt.jar/" ; String fn2 = "C:/Program Files/Java/jdk1.7.0_25/src.zip" ; InputStream is = new FileInputStream( fn1 ); JarInputStream jis = new JarInputStream( is ); JarEntry je = null; while ( ( je = jis.getNextEntry( ) ) != null ) if ( je.getName( ).startsWith( "java/lang/Double" ) ) break ; int i; if ( je != null ) while ( ( i = jis.read( ) ) != -1 ) System.out.print( (char) i ); jis.close( ); PJV05
9
Třída ZipFile poslouží jen pro čtení komprimovaného souboru.
Uložení entry a dat je patrně různé při kompresi ZipOutputStreamem Některé oblíbené programy – např. WinZip 7.0. – ukládájí data jinak než ZipOutputStream. ZipFile zf = new ZipFile ( "C:\\windata.zip" ); Enumeration en = zf.entries( ); while ( en.hasMoreElements( ) ) { System.out.print( en.nextElement( ) ; } ZipEntry ze = zf.getEntry( "dir1 / ZZ" ); InputStream is = zf.get InputStream( ze ) ; int i; while ( ( i = zis.read( ) ) != -1 ) { System.out.print( i + " " ) ; } zis.close( ) ; zf.close( ) ; PJV05 ALG
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.