资源简介
自己写的LZW压缩。因为自己搜这方面资料时,基本一个样,所以决定把自己分享下。
代码片段和文件信息
package ebk.aem.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Random;
public class LZWCompressions {
private short[] code_value;
private short[] prefix;
private short[] suffix;
private int BITS;
private final int TABLESIZE;
private final short SHIFT =4;
private final int MAX_CODE;
BufferedOutputStream bos;
public LZWCompressions()
{
this(12);
}
public LZWCompressions(int bits)
{
this.BITS = bits;
if(BITS <= 12)
TABLESIZE = 4096;
else if(BITS == 13)
TABLESIZE = 8192;
else
TABLESIZE = 16384;
code_value = new short[TABLESIZE];
prefix = new short[TABLESIZE];
suffix = new short[TABLESIZE];
MAX_CODE = (1 << BITS)-1-1; /*value of the largest index substract 1*/
}
public void Coding(File inpathFile outpath)
{
try {
FileInputStream fis = new FileInputStream(inpath);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(outpath);
DataOutputStream dos = new DataOutputStream(fos);
short old_value = 0;
short new_value = 0;
short next_code = 256;
for(short i = 0 ;i {
code_value[i]= -1;
prefix[i] = -1;
suffix[i] = -1;
}
if(bis.available() > 0)
{
old_value =(short) bis.read();
while((new_value = (short)bis.read()) != -1)
{
// System.out.println(“old_value“+old_value);
// System.out.println(new_value);
short index = FindMatch(old_valuenew_value);
if(code_value[index] != -1)
{
old_value = code_value[index];
}
else{
if(next_code <= MAX_CODE) /*because next_code will be index(下标),next_code can‘t be greater the largest index of the array */
{
prefix[index] = old_value;
suffix[index] = new_value;
code_value[index] = next_code++;
}
dos.writeShort(old_value);
// System.out.println(old_value);
old_value = new_value; /*assign the new_value to old_value when next_code>MAX_CODE*/
}
}
dos.writeShort(old_value);
// System.out.println(old_value);
}
dos.close();
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Quadratic linear hash again
* @param pre
* @param suf
* @return
*/
private short FindMatch(short preshort suf)
{
int index;
int var = 0;
int offset = 0;
int di = 1;
index = (suf << SHIFT) ^ pre;
boolean flag = false;
while (true) {
if(var < TABLESIZE/2) /*please review principle of the quadratic linear hash again if you don‘t see this step*/
{
var++;
di = var*var;
}
if (code_value[index] == -1)
return (short) index;
i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1800054 2013-05-31 13:35 LZW压缩\a.bmp
文件 84992 2013-07-15 21:49 LZW压缩\LZW算法说明_英文.doc
文件 77824 2013-07-19 13:17 LZW压缩\LZW算法说明中文.doc
文件 3366 2013-07-19 13:04 LZW压缩\程序源码\LZWCompressions.java
文件 4663 2013-07-19 11:44 LZW压缩\程序源码\LZWDeCompress.java
文件 1235 2013-07-19 12:58 LZW压缩\程序源码\LZWTEST.java
文件 613 2013-07-19 13:11 LZW压缩\程序说明.txt
目录 0 2013-07-19 13:16 LZW压缩\程序源码
目录 0 2013-07-19 13:18 LZW压缩
----------- --------- ---------- ----- ----
1972747 9
- 上一篇:JAVA仪器设备管理系统
- 下一篇:小芳便利店java实现
相关资源
- 小芳便利店java实现
- JAVA仪器设备管理系统
- 平安科技Java一百道面试题
- java取出mysql中数据,显示在jtable里面
-
java读取多个excel内容生成一个xm
l文 - 图像特征提取算法java实现
- 张孝祥高清Java视频教程
- Java简单的游戏人物移动
- java进销存系统
- java几种基本排序动态演示
- javax.mail-api.jar,activation.jar包
- 广州铭太Java笔试题
- IC卡读写器JAVA
- 淘宝中根据图片搜图片基于Java语言实
- 简单的敏感词统计系统 java
- Java求解篮球错排问题
- JAVA计算器源代码与WINDOWS的计算器长得
- 基于java开发的考勤管理系统
- 国密算法SM4加解密算法JAVA
- 单点登录sso的原理与java实现详细讲解
- java 单机版 考试登陆系统 附有登陆
- java用数组实现约瑟夫环
- Java学生管理系统,使用eclipse,sql s
- java实现蜘蛛纸牌游戏
- 使用java SWT编写界面的,多代码
- swing Java 小家电系统代码
- 超市收银系统Java源代码
- JAVA实现矩阵的加减和转置
- 欧拉回路程序java
- core-3.0.0.jar QR二维码3.0 版本,Java生成
评论
共有 条评论