Java 字符串和符号的压缩

Java 字符串和符号的压缩,java,android,string,encoding,compression,Java,Android,String,Encoding,Compression,我有大约200个字符的字符串,包括字符和符号 我想用任何算法压缩这个字符串 请帮助我任何类型的程序,代码,算法 提前谢谢 目前我正在使用它,但当有符号时,它会显示数组索引超出范围 **COMPRESSION** byte[] encode(String txt, int bit){ int length = txt.length(); float tmpRet1=0,tmpRet2=0; if(bit==6){ tmpRet1=3.0f; tmpRet2=4.0f; }else

我有大约200个字符的字符串,包括字符和符号 我想用任何算法压缩这个字符串

请帮助我任何类型的程序,代码,算法

提前谢谢

目前我正在使用它,但当有符号时,它会显示数组索引超出范围

**COMPRESSION**
byte[] encode(String txt, int bit){
int length = txt.length();
float tmpRet1=0,tmpRet2=0;
if(bit==6){
    tmpRet1=3.0f;
    tmpRet2=4.0f;
}else if(bit==5){
    tmpRet1=5.0f;
    tmpRet2=8.0f;
}
byte encoded[]=new byte[(int)(tmpRet1*Math.ceil(length/tmpRet2))];
char str[]=new char[length];
txt.getChars(0,length,str,0);
int chaVal = 0;
String temp;
String strBinary = new String("");
for (int i = 0;i<length; i++){
    temp = Integer.toBinaryString(toValue(str[i]));
    while(temp.length()%bit != 0){
        temp="0"+temp;
    }
    strBinary=strBinary+temp;
}
while(strBinary.length()%8 != 0){
   strBinary=strBinary+"0";
}
Integer tempInt =new Integer(0);
for(int i=0 ; i<strBinary.length();i=i+8){
    tempInt = tempInt.valueOf(strBinary.substring(i,i+8),2);
    encoded[i/8]=tempInt.byteValue();
}
return encoded;
}



**DECOMPRESSION** :

String decode(byte[] encoded, int bit){
String strTemp = new String("");
String strBinary = new String("");
String strText = new String("");
Integer tempInt =new Integer(0);
int intTemp=0;
for(int i = 0;i<encoded.length;i++){         
    if(encoded[i]<0){
        intTemp = (int)encoded[i]+256;
    }else
        intTemp = (int)encoded[i];
    strTemp = Integer.toBinaryString(intTemp);
    while(strTemp.length()%8 != 0){
        strTemp="0"+strTemp;
    }
    strBinary = strBinary+strTemp;
}
for(int i=0 ; i<strBinary.length();i=i+bit){
    tempInt = tempInt.valueOf(strBinary.substring(i,i+bit),2);
    strText = strText + toChar(tempInt.intValue()); 
}
return strText;
}
**压缩**
字节[]编码(字符串txt,整数位){
int length=txt.length();
浮动tmpRet1=0,tmpRet2=0;
如果(位==6){
tmpRet1=3.0f;
tmpRet2=4.0f;
}else if(位==5){
tmpRet1=5.0f;
tmpRet2=8.0f;
}
字节编码[]=新字节[(int)(tmpRet1*Math.ceil(length/tmpRet2))];
char str[]=新字符[长度];
getChars(0,长度,str,0);
int chaVal=0;
字符串温度;
字符串strBinary=新字符串(“”);

对于(inti=0;i您可以使用gziputputstream进行压缩,也可以使用gziputputstream进行解压缩

如果要在内存中执行此操作,只需使用ByteArrayInputStream/ByteArrayOutputStream作为上述两个类的目标

请参阅下面的链接:


您可以使用gziputputstream进行压缩,也可以使用gziputputstream进行解压缩

如果要在内存中执行此操作,只需使用ByteArrayInputStream/ByteArrayOutputStream作为上述两个类的目标

请参阅下面的链接:


有一次,在我学习的时候,老师让我编写一个文本压缩程序(很酷的家庭作业)。 其基本思想是:如果每个字符都是8位,则查找出现最多的字符并为其指定较短的值,同时为出现较少的字母指定较大的值

例如:

A=01010101
B=10101010

未压缩:AAAB-01010101 01010101 01010101 10101010

压缩:

A出现3次(应具有较短的表示) B出现1次(应具有更长的代表性)

A-01

B-10

结果:01 10

因此,您为每个字母生成一系列位,使任何字母都不具有可以与另一个字母匹配的表示形式,然后将生成的方案存储在压缩文件中。 如果要反压缩,只需从压缩文件中读取方案,然后开始逐位读取


查看此处了解详细信息:

有一次,我在学习时,老师让我编写一个文本压缩程序(很酷的家庭作业)。 其基本思想是:如果每个字符都是8位,则查找出现最多的字符并为其指定较短的值,同时为出现较少的字母指定较大的值

例如:

A=01010101
B=10101010

未压缩:AAAB-01010101 01010101 01010101 10101010

压缩:

A出现3次(应具有较短的表示) B出现1次(应具有更长的代表性)

A-01

B-10

结果:01 10

因此,您为每个字母生成一系列位,使任何字母都不具有可以与另一个字母匹配的表示形式,然后将生成的方案存储在压缩文件中。 如果要反压缩,只需从压缩文件中读取方案,然后开始逐位读取


查看此处以了解详细信息:

您在哪里(行号)遇到异常?注意:不要使用
新字符串(“”;
,这会导致不必要的复杂和低效。只需使用
字符串strTemp=“”;
。同样,不要使用
新整数(0);
,但只是
0
。事实上,
tempInt
应该是
int
而不是
Integer
。哪里(行号)会出现异常?注意:永远不要使用
新字符串(“”;
),它不必要地复杂和低效。只需使用
String strTemp=“”;
相反。同样,不要使用
新整数(0);
,而只使用
0
。事实上,
tempInt
应该是
int
而不是
整数
。有关这个想法的更复杂版本,请参阅。哈夫曼编码对我来说是个不错的选择。…!!:)任何关于哈夫曼JAVA代码的链接都会有帮助吗?请查看并查看这个想法的更复杂版本。哈夫曼编码对我来说是一个很好的呼吁。…!!:)任何关于哈夫曼JAVA代码的链接都会有帮助吗?请查看并感谢您的回复,但是使用GZIP outputstream是不适用的,因为我想使用相同的dec其他语言或应用程序(如DELPHI)的压缩方法,在那里我找不到相同的功能GZIP是一个标准压缩协议,几乎可以在任何平台和语言上找到实现。一个简短的搜索检索到此:+10此:):)很棒的搜索…!!解决了我的问题!如果可用也可以在delphi中使用ble!请帮助我链接GZIP的工件delphi代码。新问题+V.IMP-还有可能,如果我使用GZIP在JAVA中压缩一个文件,并将其放入delphi代码中,它会检索到相同的信息吗?GZIP压缩/解压缩算法与它所用的语言没有任何关系(给定正确的实现:))。我会尝试找到一个示例。我很感谢您的回复,但使用GZIP outputstream不适用,因为我想对其他语言或应用程序(如DELPHI)使用相同的解压缩方法,在那里我将无法找到相同的功能GZIP是一个标准压缩协议,可以在虚拟机上找到实现任何平台和语言。一个简短的搜索检索到这个:+10,这个:):)很棒的搜索…!!解决了我的问题!如果在delphi中也可用!请帮助我链接一个工件delphi代码用于GZIP。新问题+V.IMP-也有可能,如果我使用GZIP在JAVA中压缩一个文件,并将它放在delphi代码中,它会被删除吗我也是