a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 69|回复: 1

[JAVA] 2011年计算机等级考试二级JAVA学习精华整理(23)

[复制链接]
发表于 2012-7-31 22:04:26 | 显示全部楼层 |阅读模式
 1.1.3.2.6 压缩   Java提供用于压缩和解压字节流的类,这些类包含在java.util.zip 包里面,这些类也作为 Jar 文件的服务基础 ( Jar 文件是带有附加文件列表的 Zip 文件)。
, S0 H3 B2 y4 u" e( R  下面的程序接收一个输入文件并将之写入一个只有一项的压缩的 Zip 文件:
  s' d, _3 O/ w0 }) M  import java.io.*;: U2 J+ d# w9 ?2 k
  import java.util.zip.*;
( ~. j0 _' C$ g2 q/ w  public class compress {3 C5 B% `- M2 y, l
  public static void doit(String filein, String fileout) {; u- n' T0 L, W9 x
  FileInputStream fis = null;. z4 m, T+ E0 r. U
  FileOutputStream fos = null;8 H  k) M" M+ d7 G; W+ b; n: b. E5 \
  try {
3 Y, n! Y! c0 y! L2 T1 ~. ~  fis = new FileInputStream(filein);
* j" e5 c( V" F  fos = new FileOutputStream(fileout);7 ]5 }8 [% U& n% |9 v7 p% i/ c% C
  ZipOutputStream zos = new ZipOutputStream(fos);
: Q3 z( ~! |" s' ~' ?( Y; R% r: \  ZipEntry ze = new ZipEntry(filein);+ E6 a1 n6 d( \! ~) c
  zos.putNextEntry(ze);# M& [0 m1 L. n5 _  p8 U
  final int BUFSIZ = 4096;- P$ T1 y7 W( `
  byte inbuf[] = new byte[BUFSIZ];3 g) ]" P7 ~  _9 R4 W, ]
  int n;5 B! x; p6 }. n9 B8 Z
  while ((n = fis.read(inbuf)) != -1)( q3 A( ^7 q0 A
  zos.write(inbuf, 0, n);
9 K, b5 U; i1 O( I$ M. i  fis.close();
; H% W: ?! T. ^* l# e6 R: ]  fis = null;, @3 U% g! D$ e3 [& T
  zos.close();
) |; ]7 \- U5 f) P  fos = null;
. k1 J# M# h6 ?0 F# N; O8 J( ^" Z  } catch (IOException e) {  @. |( x8 L4 C7 i' C' `. I+ z
  System.err.println(e);2 s) R" r/ {; f3 n
  } finally {( F& I8 T9 G9 n
  try {1 J: _. u8 j7 a" y" P
  if (fis != null): q% x+ C7 F2 c* f5 d! }. Y4 t
  fis.close();
& F4 a/ |* ^( d8 g/ a: p/ s  if (fos != null)7 q9 J) [. g: f  t9 i- m6 X
  fos.close();1 V* j8 X% p/ f8 k9 O
  } catch (IOException e) {
* i# ^/ E. C" J  U  }
7 y. u% }& \1 e: K$ f' N  }
% l3 {4 i8 U8 M+ B8 p2 Y9 Y  }2 L) {- ^# ~/ [, o
  public static void main(String args[]) {/ z! q! L& B. I/ N
  if (args.length != 2) {
0 T& c  ]! Z+ V6 p% |  System.err.println("missing filenames");
4 F$ V9 F+ ?# m+ M" B/ |" e  System.exit(1);" s- z* u( f; [, X3 w  N9 a
  }
1 Y# L6 E5 U3 X. B+ z0 |  if (args[0].equals(args[1])) {
8 ]7 ~* B6 v* y% b  System.err.println("filenames are identical");. n& x6 V/ Z, x; i
  System.exit(1);
8 o* h# x7 @7 q  N, j& F/ i0 S  V  }5 ]$ N( }$ A7 {
  doit(args[0], args[1]);. X$ @& W' }+ ~1 t7 I$ s/ y0 o
  }" z+ }7 m" Y- w  t
  }
回复

使用道具 举报

 楼主| 发表于 2012-7-31 22:04:27 | 显示全部楼层

2011年计算机等级考试二级JAVA学习精华整理(23)

 下一个程序执行相反的过程,将一个假设只有一项的Zip文件作为输入然后将之解压到输出文件:  import java.io.*;
* A; B# F' R& M9 G  s/ X  import java.util.zip.*;
7 R$ {3 L- R0 }! K" W7 I: D5 J  public class uncompress {
4 d6 H. j- g) C! r  public static void doit(String filein, String fileout) {/ Z* \+ Y$ T* r$ [# X
  FileInputStream fis = null;% k  U" `' [) B  Q
  FileOutputStream fos = null;
+ ~$ G$ O, M  V  try {. g, P- d$ e/ h0 i2 n0 I
  fis = new FileInputStream(filein);# j- T9 j; n/ z% z" W% _
  fos = new FileOutputStream(fileout);3 ?6 Y2 ?2 s9 E" n) h
  ZipInputStream zis = new ZipInputStream(fis);0 q  Z. h( j2 e% a9 l! a: F9 m
  ZipEntry ze = zis.getNextEntry();/ X% s1 o; O  p
  final int BUFSIZ = 4096;
) m, y" H8 p2 _* q  byte inbuf[] = new byte[BUFSIZ];/ x0 j. G, A5 J4 ]+ K1 }
  int n;
6 n0 ]$ G" `0 P$ W( S  while ((n = zis.read(inbuf, 0, BUFSIZ)) != -1)
1 n% S4 r9 e9 T# S1 i7 V# `: J! V% V  fos.write(inbuf, 0, n);
2 T: S! D' k" a" F2 z+ l, e2 D  zis.close();' B$ m+ h: R- s' F7 g
  fis = null;, d5 B4 U2 p. r4 }$ N3 e, m1 J
  fos.close();# D. k- F/ F! Z$ s. n" X+ K. p
  fos = null;9 f1 b4 g% p, T
  } catch (IOException e) {1 ?0 H+ }) T0 R' k- ?( Z$ i
  System.err.println(e);5 c. ]! e1 v8 U3 L
  } finally {
5 ]0 [6 u5 M3 q+ r9 _- Y  try {
& E; V) a* s! t4 v4 y9 G" S$ P  if (fis != null)
( b5 h7 \' X; G* V  fis.close();
9 X0 n# F# j) m/ b/ }0 X  if (fos != null)
$ j$ M) \, a' u* d5 Y+ J  fos.close();
: y  z$ H& s, y  } catch (IOException e) {- q7 o! A# g" H
  }7 d3 `& R9 p2 [$ f% d/ y" ~
  }
0 u$ Z" E; |  @$ i  }* s/ r0 {+ t8 d
  public static void main(String args[]) {
! U, K2 b  g  E  @4 x  if (args.length != 2) {
' ^# p) h8 A# X8 ^) `$ S  System.err.println("missing filenames");
9 i# P+ U# V) V8 Y  System.exit(1);
$ i5 G# {. C7 v0 B  }0 U+ Q/ t# @, f
  if (args[0].equals(args[1])) {
3 U+ G  O$ ~4 T' q( \7 D7 e  System.err.println("filenames are identical");
0 g; B9 M, ]7 g2 J; V& y, N  System.exit(1);
3 a) ~8 a! N$ O# ?9 \; D  }0 k: l2 ~- w* e) ~+ H/ u
  doit(args[0], args[1]);
/ w0 i' m9 p! L7 y, Y  }
5 @( j6 l! W" T# d* \  }
5 \6 m3 a) S+ J& m4 q  压缩是提高还是损害I/O性能很大程度依赖你的硬件配置,特别是和处理器和磁盘驱动器的速度相关。使用Zip技术的压缩通常意味着在数据大小上减少50%,但是代价是压缩和解压的时间。一个巨大(5到10 MB)的压缩文本文件,使用带有IDE硬盘驱动器的300-MHz Pentium PC从硬盘上读取可以比不压缩少用大约1/3的时间。
) k* {5 z+ ?% A0 s% O. X  压缩的一个有用的范例是向非常慢的媒介例如软盘写数据。使用高速处理器(300 MHz Pentium)和低速软驱(PC上的普通软驱)的一个测试显示压缩一个巨大的文本文件然后在写入软盘比直接写入软盘快大约50% 。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-20 09:23 , Processed in 0.255805 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表