JAVA中的deflate壓縮實現(xiàn)方法
更新時間:2016年09月01日 09:13:01 投稿:jingxian
下面小編就為大家?guī)硪黄狫AVA中的deflate壓縮實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
在文件的傳輸過程中,為了使大文件能夠更加方便快速的傳輸,一般采用壓縮的辦法來對文件壓縮后再傳輸,JAVA中的java.util.zip包中的Deflater和Inflater類為使用者提供了DEFLATE算法的壓縮功能,以下是自已編寫的壓縮和解壓縮實現(xiàn),并以壓縮文件內(nèi)容為例說明,其中涉及的具體方法可查看JDK的API了解說明。
/**
*
* @param inputByte
* 待解壓縮的字節(jié)數(shù)組
* @return 解壓縮后的字節(jié)數(shù)組
* @throws IOException
*/
public static byte[] uncompress(byte[] inputByte) throws IOException {
int len = 0;
Inflater infl = new Inflater();
infl.setInput(inputByte);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] outByte = new byte[1024];
try {
while (!infl.finished()) {
// 解壓縮并將解壓縮后的內(nèi)容輸出到字節(jié)輸出流bos中
len = infl.inflate(outByte);
if (len == 0) {
break;
}
bos.write(outByte, 0, len);
}
infl.end();
} catch (Exception e) {
//
} finally {
bos.close();
}
return bos.toByteArray();
}
/**
* 壓縮.
*
* @param inputByte
* 待壓縮的字節(jié)數(shù)組
* @return 壓縮后的數(shù)據(jù)
* @throws IOException
*/
public static byte[] compress(byte[] inputByte) throws IOException {
int len = 0;
Deflater defl = new Deflater();
defl.setInput(inputByte);
defl.finish();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] outputByte = new byte[1024];
try {
while (!defl.finished()) {
// 壓縮并將壓縮后的內(nèi)容輸出到字節(jié)輸出流bos中
len = defl.deflate(outputByte);
bos.write(outputByte, 0, len);
}
defl.end();
} finally {
bos.close();
}
return bos.toByteArray();
}
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("D:\\testdeflate.txt");
int len = fis.available();
byte[] b = new byte[len];
fis.read(b);
byte[] bd = compress(b);
// 為了壓縮后的內(nèi)容能夠在網(wǎng)絡(luò)上傳輸,一般采用Base64編碼
String encodestr = Base64.encodeBase64String(bd);
byte[] bi = uncompress(Base64.decodeBase64(encodestr));
FileOutputStream fos = new FileOutputStream("D:\\testinflate.txt");
fos.write(bi);
fos.flush();
fos.close();
fis.close();
} catch (Exception e) {
//
}
}
以上這篇JAVA中的deflate壓縮實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java線程的start方法回調(diào)run方法的操作技巧
面試過程中經(jīng)常會被面試官問到為什么我們調(diào)用start()方法時會執(zhí)行run()方法,為什么不能直接調(diào)用run()方法,問的一頭霧水,今天小編給大家介紹下Java線程的start方法回調(diào)run方法的操作技巧,需要的朋友參考下吧2017-11-11
解決IDEA右鍵沒有創(chuàng)建新的package選項的情況
這篇文章主要介紹了解決IDEA右鍵沒有創(chuàng)建新的package選項的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
MyBatis Plus整合Redis實現(xiàn)分布式二級緩存的問題
Mybatis內(nèi)置的二級緩存在分布式環(huán)境下存在分布式問題,無法使用,但是我們可以整合Redis來實現(xiàn)分布式的二級緩存,這篇文章給大家介紹MyBatis Plus整合Redis實現(xiàn)分布式二級緩存,感興趣的朋友跟隨小編一起看看吧2023-11-11

