欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
利用JAVA API函數實(shí)現數據的壓縮與解壓縮(3)
利用JAVA API函數實(shí)現數據的壓縮與解壓縮(3)
http://www.51cto.com 2005-10-11 00:00 作者:夏治(Tim) 出處:51cto.com
【導讀】這篇文章簡(jiǎn)要的介紹了數據的壓縮與解壓縮,并展示了用java.util.zip包來(lái)實(shí)現數據的壓縮與解壓縮是多么的方便與高效。
將數據壓縮歸檔入一ZIP文件

類(lèi)ZipOutputStream能夠用來(lái)將數據壓縮成一個(gè)ZIP文件。ZipOutputStream將數據寫(xiě)入ZIP格式的輸出流。下面的步驟與創(chuàng )建一個(gè)ZIP文件相關(guān)。

1、第一步是創(chuàng )建一個(gè)ZipOutputStream對象,我們將要寫(xiě)入輸出流的文件作為參數傳給它。下面的代碼演示了如何創(chuàng )建一個(gè)名為"myfigs.zip"的ZIP文件。

FileOutputStream dest = new

FileOutputStream("myfigs.zip");

ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));

2、一但目標輸出流創(chuàng )建后,下一步就是打開(kāi)數據源文件。在這個(gè)例子中,源數據文件是指那些當前目錄下的文件。命令list用來(lái)得到當前目錄下文件列表:

File f = new File(".");

String files[] = f.list();

for (int i=0; i < files.length; i++) {

System.out.println("Adding: "+files[i]);

FileInputStream fi = new FileInputStream(files[i]);

// create zip entry

// add entries to ZIP file

}

注意:這個(gè)例程能夠壓縮當前目錄下的所有文件。它不能處理子目錄。作為一個(gè)練習,你可以修改例程3來(lái)處理子目錄。

3、 為讀出的數據創(chuàng )建一個(gè)ZIP條目列表:

ZipEntry entry = new ZipEntry(files[i]))

4、 在你將數據寫(xiě)入ZIP輸出流之前,你必須使用putNextEntry方法將ZIP條目列表寫(xiě)入輸出流:

out.putNextEntry(entry);

5、 將數據寫(xiě)入ZIP文件:

int count;

while((count = origin.read(data, 0, BUFFER)) != -1) {

out.write(data, 0, count);

}

6、 最后關(guān)閉所有的輸入輸出流:

origin.close();

out.close();

 

完整的程序代碼如例程3所示。

例程3源代碼:

Zip.java

import java.io.*;

import java.util.zip.*;

public class Zip {

static final int BUFFER = 2048;

public static void main (String argv[]) {

try {

BufferedInputStream origin = null;

FileOutputStream dest = new

FileOutputStream("c:\zip\myfigs.zip");

ZipOutputStream out = new ZipOutputStream(new

BufferedOutputStream(dest));

//out.setMethod(ZipOutputStream.DEFLATED);

byte data[] = new byte[BUFFER];

// get a list of files from current directory

File f = new File(".");

String files[] = f.list();

for (int i=0; i < files.length; i++) {

System.out.println("Adding: "+files[i]);

FileInputStream fi = new

FileInputStream(files[i]);

origin = new

BufferedInputStream(fi, BUFFER);

ZipEntry entry = new ZipEntry(files[i]);

out.putNextEntry(entry);

int count;

while((count = origin.read(data, 0,

BUFFER)) != -1) {

out.write(data, 0, count);

}

origin.close();

}

out.close();

} catch(Exception e) {

e.printStackTrace();

}}

}

注意: 條目列表可以以?xún)煞N方式加入ZIP文件中,一種是壓縮方式(DEFLATED),另一種是不壓縮方式(STORED),系統默認的存儲方式為壓縮方式(DEFLATED)。SetMethod方法可以用來(lái)設置它的存儲方式。例如,設置存儲方式為DEFLATED(壓縮)應該這樣做: out.setMethod(ZipOutputStream.DEFLATED) 設置存儲方式為(不壓縮)應該這樣做: out.setMethod(ZipOutputStream.STORED)。

ZIP文件屬性

類(lèi)ZipEntry描述了存儲在ZIP文件中的壓縮文件。類(lèi)中包含有多種方法可以用來(lái)設置和獲得ZIP條目的信息。類(lèi)ZipEntry是被ZipFile和ZipInputStream使用來(lái)讀取ZIP文件,ZipOutputStream來(lái)寫(xiě)入ZIP文件的。ZipEntry中最有用的一些方法顯示在下面的表格2中,并且有相應的描述。

表格 2: 類(lèi)ZipEntry中一些有用的方法

方法簽名 描述

public String getComment() 返回條目的注釋, 沒(méi)有返回null

public long getCompressedSize() 返回條目壓縮后的大小, 未知返回-1

public int getMethod() 返回條目的壓縮方式,沒(méi)有指定返回 -1

public String getName() 返回條目的名稱(chēng)

public long getSize() 返回未被壓縮的條目的大小,未知返回-1

public long getTime() 返回條目的修改時(shí)間, 沒(méi)有指定返回-1

public void setComment(String c) 設置條目的注釋

public void setMethod(int method) 設置條目的壓縮方式

public void setSize(long size) 設置沒(méi)有壓縮的條目的大小

public void setTime(long time) 設置條目的修改時(shí)間

求和校驗

java.util.zip包中另外一些比較重要的類(lèi)是Adler32和CRC32,它們實(shí)現了java.util.zip.Checksum接口,并估算了壓縮數據的校驗和(checksum)。眾所周知,在運算速度方面,Adler32算法比CRC32算法要有一定的優(yōu)勢;但在數據可信度方面,CRC32算法則要更勝一籌。正所謂,"魚(yú)與熊掌,不可兼得。",大家只好在不同的場(chǎng)合下,加以取舍了。GetValue方法可以用來(lái)獲得當前的checksum值,reset方法能夠重新設置checksum為其缺省的值。

求和校驗一般用來(lái)校驗文件和信息是否正確的傳送。舉個(gè)例子,假設你想創(chuàng )建一個(gè)ZIP文件,然后將其傳送到遠程計算機上。當到達遠程計算機后,你就可以使用checksum檢驗在傳輸過(guò)程中文件是否發(fā)生錯誤。為了演示如何創(chuàng )建checksums,我們修改了例程1和例程3,在例程4和例程5中使用了兩個(gè)新類(lèi),一個(gè)是CheckedInputStream,另一個(gè)是CheckedOutputStream。(大家注意:這兩段代碼在壓縮與解壓縮過(guò)程中,使用了同一種算法,求數據的checksum值。)

例程4源代碼:

Zip.java

import java.io.*;

import java.util.zip.*;

public class Zip {

static final int BUFFER = 2048;

public static void main (String argv[]) {

try {

BufferedInputStream origin = null;

FileOutputStream dest = new

FileOutputStream("c:\zip\myfigs.zip");

CheckedOutputStream checksum = new

CheckedOutputStream(dest, new Adler32());

ZipOutputStream out = new

ZipOutputStream(new

BufferedOutputStream(checksum));

//out.setMethod(ZipOutputStream.DEFLATED);

byte data[] = new byte[BUFFER];

// get a list of files from current directory

File f = new File(".");

String files[] = f.list();

for (int i=0; i < files.length; i++) {

System.out.println("Adding: "+files[i]);

FileInputStream fi = new

FileInputStream(files[i]);

origin = new

BufferedInputStream(fi, BUFFER);

ZipEntry entry = new ZipEntry(files[i]);

out.putNextEntry(entry);

int count;

while((count = origin.read(data, 0,

BUFFER)) != -1) {

out.write(data, 0, count);

}

origin.close();

}

out.close();

System.out.println("checksum:

"+checksum.getChecksum().getValue());

} catch(Exception e) {

e.printStackTrace();

}}

}

例程5源代碼:

UnZip.java

import java.io.*;

import java.util.zip.*;

public class UnZip {

public static void main (String argv[]) {

try {

final int BUFFER = 2048;

BufferedOutputStream dest = null;

FileInputStream fis = new

FileInputStream(argv[0]);

CheckedInputStream checksum = new

CheckedInputStream(fis, new Adler32());

ZipInputStream zis = new

ZipInputStream(new

BufferedInputStream(checksum));

ZipEntry entry;

while((entry = zis.getNextEntry()) != null) {

System.out.println("Extracting: " +entry);

int count;

byte data[] = new byte[BUFFER];

// write the files to the disk

FileOutputStream fos = new

FileOutputStream(entry.getName());

dest = new BufferedOutputStream(fos,

BUFFER);

while ((count = zis.read(data, 0,

BUFFER)) != -1) {

dest.write(data, 0, count);

}

dest.flush();

dest.close();

}

zis.close();

System.out.println("Checksum:

"+checksum.getChecksum().getValue());

} catch(Exception e) {

e.printStackTrace();

}

}}

測試例程4和5,編譯類(lèi)文件并運行類(lèi)Zip來(lái)創(chuàng )建一個(gè)壓縮檔案(程序會(huì )計算出checksum值并顯示在屏幕上),然后運行UnZip類(lèi)來(lái)解壓縮這個(gè)檔案(屏幕上同樣會(huì )打印出一個(gè)checksum值)。兩個(gè)值必須完全相同,否則說(shuō)明出錯了。Checksums在數據校驗方面非常有用。例如,你可以創(chuàng )建一個(gè)ZIP文件,然后連同checksum值一同傳遞給你的朋友。你的朋友解壓縮文件后,將生成的checksum值與你提供的作一比較,如果相同則說(shuō)明在傳遞過(guò)程中沒(méi)有發(fā)生錯誤。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
何應用java.util.zip包現數據壓縮與解壓
使用Java?API壓縮和?解壓縮數據
如何將文件打成zip包并下載
C#生成ZIP壓縮包
Java讀寫(xiě)Zip文件
利用Java實(shí)現zip壓縮/解壓縮
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久