CN101667843A - 嵌入式***的数据压缩、及解压缩方法与装置 - Google Patents
嵌入式***的数据压缩、及解压缩方法与装置 Download PDFInfo
- Publication number
- CN101667843A CN101667843A CN200910093863A CN200910093863A CN101667843A CN 101667843 A CN101667843 A CN 101667843A CN 200910093863 A CN200910093863 A CN 200910093863A CN 200910093863 A CN200910093863 A CN 200910093863A CN 101667843 A CN101667843 A CN 101667843A
- Authority
- CN
- China
- Prior art keywords
- byte
- byte serial
- serial
- data
- sliding window
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种嵌入式***的数据压缩方法,包括:确定出待压缩数据中相同的字节串,相同的字节串中除第一个字节串之外,使用与相同字节串的距离及相同字节的数目来代替所述相同的字节串。本发明同时公开了一种嵌入式***的数据解压缩方法,包括:压缩数据中包含有压缩标识时,获取代替字节串的距离及字节数目,并在已解压的数据中所述距离处获取出所述字节数目的字节,填入当前的解压数据中。本发明同时公开了实现前述方法的装置。本发明尤其适合字节流传输的嵌入式***,而嵌入式***中的字节流传输的重复字节串又比较多,因此,数据压缩率比较高,从而使嵌入式***的CPU占用率处于较低的水平。
Description
技术领域
本发明涉及数据压缩技术,尤其涉及一种嵌入式***的数据压缩方法与装置,以及解压缩方法与装置。
背景技术
在嵌入式***数据链路传输数据的过程中,当数据流量非常大时,往往会导致链路的阻塞,同时会对数据上报的单板产生非常大的影响,使***容量大大降低,甚至会导致单板复位。例如在码分多址(CDMA,Code Division MultipleAccess)***的EVDO信道板日志上报时,当数据量较大时,将会存在大量的数据丢包现象,且当数据上报选项有多个时,由于链路的堵塞,很容易导致单板复位,给***带来很多风险,同时给局外人员定位问题也增加了难度。为了能够准确定位问题,实现多个数据项的同时上报,并将丢包率降到最低,提出了在日志上报时,先对其进行数据压缩,在接收端再进行数据解压。从而减少了丢包问题,避免了数据传输链路的拥塞。由于传统的压缩方法,都是基于文件进行压缩的,并且都是在PC上进行压缩的,不用考虑CPU的占用率,但在嵌入式***中,所有的数据都是以字节流的形式出现的,没有办法以文件的方式进行压缩存储,只能压缩缓冲数据流,而且由于数据的传输是一个不间断的过程,需要考虑到CPU的占用率、内存利用率,同时也需要考虑到压缩率。目前,尚未有专门针对嵌入式***的较合适的数据压缩的技术方案。
发明内容
有鉴于此,本发明的主要目的在于提供一种嵌入式***的数据压缩方法与装置,以及解压缩方法与装置,能对嵌入式***中的字节流进行很好地压缩,利于数据传输。
为达到上述目的,本发明的技术方案是这样实现的:
一种嵌入式***的数据压缩方法,包括:
确定出待压缩数据中相同的字节串,相同的字节串中除第一个字节串之外,使用与相同字节串的距离及相同字节的数目来代替所述相同的字节串。
优选地,所述方法还包括:
传输数据时,为未压缩数据及压缩数据分别设置标识位。
优选地,所述与相同字节串的距离及相同字节的数目使用伽马Gamma编码方式进行编码。
优选地,所述确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则之前有与所述字节串相同的字节串,则继续滑动所述滑动窗,直到确定出与之前字节串相同的最长字节串,并确定出与之前相同的字节串的距离。
优选地,所述确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则确定出与所述字节串相同且距离最近的字节串,并继续滑动所述滑动窗,判断与前一滑动窗中所述字节串相同且距离最近的字节串的后一滑动窗中字节是否与当前的滑动窗中的字节串相同,确定出字节串相同的最长字节串,并判断字节串相同的最长字节串的字节数是否达到设定阈值,未达到时则判断是否还存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,直到确定出的字节串相同的最长字节串的字节数达到设定阈值;或确定不存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,并以所确定的字节串相同的最长字节串作为最终的相同的字节串。
优选地,所述方法还包括:
确定所述滑动窗中的字节串与之前字节串不同时,将所述字节串存储于索引链表的节点中,记录相同字节串的偏移量为零,记录所述字节串在类表数组中对应地址存储的数据为存储所述字节串的节点在所述索引链表中顺序值;确定所述滑动窗中的字节串与之前字节串相同时,将所述字节串存储于索引链表的节点中,所述字节串与当前最近的相同字节串的偏移量作为所述字节串的偏移量,记录所述字节串在类表数组中对应地址存储的数据为存储所述字节串的节点在所述索引链表中顺序值。
一种嵌入式***的数据解压缩方法,包括:
压缩数据中包含有压缩标识时,获取代替字节串的距离及字节数目,并在已解压的数据中所述距离处获取出所述字节数目的字节,填入当前的解压数据中。
优选地,所述获取代替字节串的距离及字节数目,包括:
使用Gamma编码方式对压缩数据中代替字节串的距离及字节数目进行解码而获取所述距离及所述字节数目。
一种嵌入式***的数据压缩装置,包括:
确定单元,用于确定出待压缩数据中相同的字节串;以及
压缩单元,用于对相同的字节串中除第一个字节串之外,使用与相同字节串的距离及相同字节的数目来代替所述相同的字节串。
优选地,所述装置还包括:
设置单元,用于传输数据时,为未压缩数据及压缩数据分别设置标识位。
优选地,所述装置还包括:
编码单元,用于对与相同字节串的距离及相同字节的数目使用Gamma编码方式进行编码。
优选地,所述确定单元确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则之前有与所述字节串相同的字节串,则继续滑动所述滑动窗,直到确定出与之前字节串相同的最长字节串,并确定出与之前相同的字节串的距离。
优选地,所述确定单元确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则确定出与所述字节串相同且距离最近的字节串,并继续滑动所述滑动窗,判断与前一滑动窗中所述字节串相同且距离最近的字节串的后一滑动窗中字节是否与当前的滑动窗中的字节串相同,确定出字节串相同的最长字节串,并判断字节串相同的最长字节串的字节数是否达到设定阈值,未达到时则判断是否还存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,直到确定出的字节串相同的最长字节串的字节数达到设定阈值;或确定不存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,并以所确定的字节串相同的最长字节串作为最终的相同的字节串。
一种嵌入式***的数据解压缩装置,包括:
确定单元,用于确定压缩数据中包含有压缩标识时,触发获取单元;
获取单元,用于获取代替字节串的距离及字节数目;以及
解压单元,用于在已解压的数据中所述距离处获取出所述字节数目的字节,并填入当前的解压数据中。
本发明中,针对嵌入式***的字节流数据,在待传输数据中确定出所有的相同的字节串,对于与之前相同的字节串,使用与之前相同的字节串的距离及相同的字节数来代替该相同的字节串,由于代替字节串的仅仅是两个数字,从而大大减少了待传输字节的数据量,从而达到了对字节流数据的压缩,解压时,对于未压缩字节,直接输出即可,对于压缩字节串,按压缩方式反向进行解压即可。本发明尤其适合字节流传输的嵌入式***,而嵌入式***中的字节流传输的重复字节串又比较多,因此,数据压缩率比较高,从而使嵌入式***的CPU占用率处于较低的水平。
附图说明
图1为本发明嵌入式***的数据压缩方法的示意图;
图2为本发明嵌入式***的数据压缩装置的组成结构示意图;
图3为本发明嵌入式***的数据接压缩装置的组成结构示意图。
具体实施方式
本发明的基本思想是:针对嵌入式***的字节流数据,在待传输数据中确定出所有的相同的字节串,对于与之前相同的字节串,使用与之前相同的字节串的距离及相同的字节数来代替该相同的字节串,由于代替字节串的仅仅是两个数字,从而大大减少了待传输字节的数据量,从而达到了对字节流数据的压缩,解压时,对于未压缩字节,直接输出即可,对于压缩字节串,按压缩方式反向进行解压即可。本发明尤其适合字节流传输的嵌入式***,而嵌入式***中的字节流传输的重复字节串又比较多,因此,数据压缩率比较高,从而使嵌入式***的CPU占用率处于较低的水平。
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
首先说明一下本发明采用的压缩原理,以字符串“abcdef1234abcdeki1234”为例进行说明,对于该字符串中,查找出内容相同的字节串,下面用“()”括起来的部分就是字节串相同的部分,如:abcdef1234(abcde)ki(1234)。本发明使用相同字节串之间的距离以及相同字符的数目(或长度)这样一对信息,来替换相同的字节串,如上述字节串可表示为:abcdef1234(10,5)ki(11,4),其中,“(10,5)”中的“10”为相同字节串与当前位置之间的距离,“5”为相同字节串的数目(或长度)。同理,“(11,4)”中的“11”为相同字节串与当前位置之间的距离,“4”为相同字节串的数目。由于相同字节串之间的距离及相同字节数目这一对信息远小于被代替的字节串的大小,所以传输的字节流中的字节串得到了压缩。
以下通过具体的示例,进一步阐明本发明技术方案的实质。
图1为本发明嵌入式***的数据压缩方法的示意图,如图1所示,本发明以字节流“abcdef1234abcki123abcde1234”为例,详细阐明本发明数据压缩的实质方案。
如图1所示,为待压缩的字节流设置存储字节串用的索引链表,并设置存储字节串匹配状态的类表数组m_awSortTable[],该数组中存储的数据为0时,表示当前滑动窗中的字节串在之前的字节串中没有与之相同的字节串,而类表数组m_awSortTable[]中存储的数据不为0时,表示当前滑动窗中的字节串在之前的字节串中有与之相同的字节串。根据滑动窗中的具体的字节串的内容来确定该字节串匹配状态在类表数组中的存储地址,以下将详细说明。本示例中的滑动窗大小为2个字节,可根据具体的需要而任意设置滑动窗的大小,例如设置其大小为3个、4个字节等。
从字节流的开头开始按滑动窗大小遍历整个字节流,首先找到“ab”2字节串,计算“ab”字节串的匹配状态在m_awSortTable[]中的存储地址,具体的,通过“a×256+b”来确定,“a×256+b”相当于确定出“ab”字节串的Hash值,通过查找m_awSortTable[a×256+b],确认其为0,因为当前不存在与“ab”字节串相同(匹配)的字节串,则将“ab”***到索引链表的节点1中,并将节点1对应的wOffSet、wSameOffSet及wnext进行赋值,即全为0,wOffSet表示当前的字节串与之前最近的相同的字节串的偏移量,wSameOffSet表示当前的字节串是否是相同字节的字节串,即确定当前的字节串是否为类似“aa”、“bb”、“22”等字节相同的字节串,本例中为非字节相同的字节串,wSameOffSet值为0,而为字节相同的字节串时,wSameOffSet值为1;wnext为与相同的字节串之间的偏移量,本发明中是确定与之前最近的字节串的偏移量(或距离),由于不存在与之相同的字节串,因此,该wnext为0。修改m awSortTable[a×256+b]=1,表示“ab”***到了索引链表的节点1中。
使滑动窗向后滑动一个字节,滑动窗当前为“bc”2字节串,确定之前的字节串中还是不存与之匹配的字节串,同“ab”相同的方式,将“bc”***索引链表的节点2,其中,节点2对应的wOffSet=0,wSameOffSet=0,wnext=0,需要说明的是,此时m_awSortTable[b×256+c]=2(之前该值为空,即为0)。
如此一直向后滑动滑动窗,直到滑动窗中出现下一个“ab”2字节串,通过计算“ab”字节串的类表数组地址,发现m_awSortTable[a×256+b]不为0,证明在前面已经出现过一次“ab”字节串,且通过查询m_awSortTable[a×256+b]=1可以知道与该字节串相同的字节串存储在索引链表的节点1中,此时从该两个相同的字节串“ab”开始,在两相同的字节串之后分别滑动滑动窗,按前述方式逐个比较两滑动窗中的字节串,直到不相同为止,得出最大的相同字节串,对于本例,即确定出三个相同字节“abc”。并计算出从第11个节点(第二个字节串“abc”或“ab”在索引链表中的存储的节点号)和第1个节点(第一个字节串“abc”或“ab”在索引链表中的存储的节点号)的差值,得到两字节串之间的距离为“10”,同时又得到相同字节串的字节数目(或长度)为“3”。并将m_awSortTable[a×256+b]=11(11为第二个字节串“ab”对应的节点号)。
接着继续滑动滑动窗,当滑动窗中出现“12”2字节串时,发现m_awSortTable[1×256+2]=7,说明在前面的字节流中已经出现过一次“12”字节串,同上一步方法,得到最大的相同字符,三个重复字符“123”和两者之间的距离“9”。
继续滑动滑动窗,当滑动窗再次出现“ab”2字节串时,发现m_awSortTable[a×256+b]=11,说明在前面的字节流中已出现过一次“ab”字节串,利用以上方式得到与节点11所在的字节串(两者之间的距离,相同字节串的字节长度),这时发现节点11对应的wnext=1,说明在节点1还有一个“ab”字节串,此时,将同时在以上步骤得到字节流当前位置到节点1所在位置的(两者之间的距离,相同字节串的字节长度),比较两次得到的“相同字节串的字节长度”,最大的一个作为最终确定的相同字节串。本例中,当前字节串“ab”与索引链表的节点1中的字节串之间的相同字节串的字节长度大,为“5”,则以(18,5)来代替字节串“abcde”。
需要说明的是,在滑动窗滑动到节点19处的“ab”时,本发明也可以先对节点11所在的字节串进行字节串的匹配,确定“相同字节串的字节长度”为“3”,则与设定的阈值(如设置为4)比较,大于等于阈值时,则直接以该最近的相同字节串的最大相同字节数作为最终的最大相同字节数;确定出的相同字节长度小于设定阈值时,确定该最近的相同字节串(“ab”)之前是否还有该相同的字节串(“ab”),并确定出与次近的相同字节串的“相同字节串的字节长度”,并与设定的阈值比较,如果小于设定阈值则继续查找之前是否还有与当前滑动窗口中相同的字节串(“ab”),直到查找出大于设定阈值的“相同字节串的字节长度”,或者查找完毕所有的字节流,如果查找完毕所有的字节流仍未查找到大于设定阈值的“相同字节串的字节长度”的字节串,则以所查找到的最大“相同字节串的字节长度”的子节串作为最终的相同字节串。
以下说明本发明如何实现压缩的,假定有一段字节流“abcdef1234abcki123abcde1234abcki123abcde1234”,当滑动窗指向字节流开头位置,取出2字节串”ab”,由图1中的滑动窗滑动过程可知,此时”ab”2字节串,没有重复,所以先往输出缓冲区中,写入bit‘0’,接着写入‘a’。
滑动窗继续往后滑动一个字节,取出2字节串”bc”,此时”bc”2字节串,也有重复,所以也是先往输出缓冲区中,写入bit‘0’,接着写入‘b’。往索引链表添加一个节点“ab”,即图1中的索引链表中的节点1。
滑动窗继续往后滑动一个字节,取出2字节串“cd”,此时“cd”2字节串,也有重复,所以也是先往输出缓冲区中,写入bit‘0’,接着写入‘c’。再往索引链表的后一个节点中添加“bc”,即图1中的索引链表的节点2。
依此类推,当滑动窗移到“4a”时,取出2字节串“4a”,此时“4a”2字节串,没有重复,所以也是先往输出缓冲区中,写入bit‘0’,接着写入‘4’。再往索引链表添加一个节点“34”,即图1中索引链表的节点9。
滑动窗继续往下滑动一个字节,取出2字节串“ab”,此时“ab”2字节串,在索引表里遍历时,发现已经在前面出现过。而且通过其索引节点,可以找到它的wOffSet偏移。从而能够定位它出现的位置,计算出“距离10”和“相同字节串的字节长度3”。此时先往输出缓冲区中,写入bit‘1’,接着先对“距离10”、“相同字节串的字节长度”进行伽马(Gamma)编码后输出到缓冲区中。然后往索引链表添加节点“4a”“ab”,即图1中的索引链表的节点10、节点11。当滑动窗移动到“12”时,处理情况和“ab”一样。
以下简单介绍一下Gamma编码,假设对x编码,令q=Int(log2x),则编码的前一部分是q个1加一个0,后一部分是q位长的二进制数,其值等于x-2q。普通数值与Gamma编码值的对应关系如表1所示:
数值 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
编码值 | 0 | 100 | 101 | 11000 | 11001 | 11010 | 11011 | 1110000 | 1110001 |
表1
滑动窗往下滑动到再一个“ab”时,取出2字节串“ab”此时“ab”2字节串,在索引表里遍历时,发现已经在前面出现过。而且通过其索引节点11,可以找到它的wOffSet偏移。从而能够定位它出现的位置,计算出它距离9和相同的长度3。此时发现索引节点的wNext值不为0,表示在节点11之前还有出现过一次“ab”所以,通出wNext取得“ab”出现的索引位置,即节点1。计算出它的距离19,相同的长度为5,比与节点11计算出来的长度还要大。接着再取得节点1的wNext的值为0,表示节点1之前没有相同的字节串“ab”了。所以此时先往输出缓冲区中,写入bit‘1’,接着先对“距离”、“相同的长度”进行Gamma编码后输出到缓冲区中。然后往索引链表添加节点“3a”、“ab”、“bc”、“cd”,即图1中的索引链表的节点18、19、20、21。
依此类推,最后压缩后的数据为“30988c664329986232198d300d669c6e”(对应的ASCII码),压缩前数据的ASCII码是“616263646566313233346162636b693132336162636465313233346162636b69313233616263646531323334”。因此大大压缩了节点流数据。
举个解压缩例子:
解压缩是一个逆反过程,相对较简单。假定压缩后的数据为”30988c664329986232198d300d669c6e”(对应的ASCII码),首先将指针指向开头,取出第一个bit,是‘0’,得出接下来的8个bit就是需要直接输出的字符。从而得到“61”(ASCII码),即字符‘a’,接着继续往下读一个“bit”位,发现还是‘0’,继续记出接下来的8个“bit”,即得到“62”(ASCII码),即字符‘b’,依此类推,可以读出“cdef1234”,当取完字符‘4’时,接下来再读一个bit位,发现是‘1’,此时,一直往下读出bit位直到不为‘1’时,得出q个1,然后再往下读一个0,接着再读出q位bit值。此时通过Gamma编码公式进行反推,可以得出压缩前编码的数据值,从而读出重复的长度;接着往下读出压缩前两者之间的距离所需要存储的bit长度,即读出两者之间的距离,然后就可以开始复制数据到当前位置输出。依此类推,就可以将所有数据解压出来。
图2为本发明嵌入式***的数据压缩装置的组成结构示意图,如图2所示,本发明嵌入式***的数据压缩装置包括确定单元20和压缩单元21,其中,确定单元20用于确定出待压缩数据中相同的字节串;压缩单元21用于对相同的字节串中除第一个字节串之外,使用与相同字节串的距离及相同字节的数目来代替所述相同的字节串。
如图2所示,本发明嵌入式***的数据压缩装置还包括设置单元22,用于传输数据时,为未压缩数据及压缩数据分别设置标识位。
如图2所示,本发明嵌入式***的数据压缩装置还包括编码单元23,用于对与相同字节串的距离及相同字节的数目使用Gamma编码方式进行编码。
确定单元20确定出待压缩数据中相同的字节串,包括:所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则之前有与所述字节串相同的字节串,则继续滑动所述滑动窗,直到确定出与之前字节串相同的最长字节串,并确定出与之前相同的字节串的距离。
或者,确定单元20确定出待压缩数据中相同的字节串,包括:所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则确定出与所述字节串相同且距离最近的字节串,并继续滑动所述滑动窗,判断与前一滑动窗中所述字节串相同且距离最近的字节串的后一滑动窗中字节是否与当前的滑动窗中的字节串相同,确定出字节串相同的最长字节串,并判断字节串相同的最长字节串的字节数是否达到设定阈值,未达到时则判断是否还存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,直到确定出的字节串相同的最长字节串的字节数达到设定阈值;或确定不存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,并以所确定的字节串相同的最长字节串作为最终的相同的字节串。
本领域技术人员应当理解,本发明图2所示的嵌入式***的数据压缩装置是为实现前述嵌入式***的数据压缩方法而设计的,图2所示装置中的各处理单元的实现功能可参照前述降低多载波相互干扰的方法中的相关描述而理解,各单元的功能可通过运行于处理器上的程序而实现,也可通过相应的逻辑电路而实现。
图3为本发明嵌入式***的数据接压缩装置的组成结构示意图,如图3所示,本发明嵌入式***的数据压缩装置包括确定单元30、获取单元31和解压单元32,其中,确定单元30用于确定压缩数据中包含有压缩标识时,触发获取单元31;获取单元31用于获取代替字节串的距离及字节数目;解压单元32用于在已解压的数据中所述距离处获取出所述字节数目的字节,并填入当前的解压数据中。
本领域技术人员应当理解,本发明图3所示的嵌入式***的数据解压缩装置是为实现前述嵌入式***的数据压缩方法而设计的,图3所示装置中的各处理单元的实现功能可参照前述降低多载波相互干扰的方法中的相关描述而理解,各单元的功能可通过运行于处理器上的程序而实现,也可通过相应的逻辑电路而实现。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (14)
1、一种嵌入式***的数据压缩方法,其特征在于,包括:
确定出待压缩数据中相同的字节串,相同的字节串中除第一个字节串之外,使用与相同字节串的距离及相同字节的数目来代替所述相同的字节串。
2、根据权利要求1所述的方法,其特征在于,所述方法还包括:
传输数据时,为未压缩数据及压缩数据分别设置标识位。
3、根据权利要求1所述的方法,其特征在于,所述与相同字节串的距离及相同字节的数目使用伽马Gamma编码方式进行编码。
4、根据权利要求1所述的方法,其特征在于,所述确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则之前有与所述字节串相同的字节串,则继续滑动所述滑动窗,直到确定出与之前字节串相同的最长字节串,并确定出与之前相同的字节串的距离。
5、根据权利要求1所述的方法,其特征在于,所述确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则确定出与所述字节串相同且距离最近的字节串,并继续滑动所述滑动窗,判断与前一滑动窗中所述字节串相同且距离最近的字节串的后一滑动窗中字节是否与当前的滑动窗中的字节串相同,确定出字节串相同的最长字节串,并判断字节串相同的最长字节串的字节数是否达到设定阈值,未达到时则判断是否还存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,直到确定出的字节串相同的最长字节串的字节数达到设定阈值;或确定不存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,并以所确定的字节串相同的最长字节串作为最终的相同的字节串。
6、根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
确定所述滑动窗中的字节串与之前字节串不同时,将所述字节串存储于索引链表的节点中,记录相同字节串的偏移量为零,记录所述字节串在类表数组中对应地址存储的数据为存储所述字节串的节点在所述索引链表中顺序值;确定所述滑动窗中的字节串与之前字节串相同时,将所述字节串存储于索引链表的节点中,所述字节串与当前最近的相同字节串的偏移量作为所述字节串的偏移量,记录所述字节串在类表数组中对应地址存储的数据为存储所述字节串的节点在所述索引链表中顺序值。
7、一种嵌入式***的数据解压缩方法,其特征在于,包括:
压缩数据中包含有压缩标识时,获取代替字节串的距离及字节数目,并在已解压的数据中所述距离处获取出所述字节数目的字节,填入当前的解压数据中。
8、根据权利要求7所述的方法,其特征在于,所述获取代替字节串的距离及字节数目,包括:
使用Gamma编码方式对压缩数据中代替字节串的距离及字节数目进行解码而获取所述距离及所述字节数目。
9、一种嵌入式***的数据压缩装置,其特征在于,包括:
确定单元,用于确定出待压缩数据中相同的字节串;以及
压缩单元,用于对相同的字节串中除第一个字节串之外,使用与相同字节串的距离及相同字节的数目来代替所述相同的字节串。
10、根据权利要求9所述的装置,其特征在于,所述装置还包括:
设置单元,用于传输数据时,为未压缩数据及压缩数据分别设置标识位。
11、根据权利要求9所述的装置,其特征在于,所述装置还包括:
编码单元,用于对与相同字节串的距离及相同字节的数目使用Gamma编码方式进行编码。
12、根据权利要求9所述的装置,其特征在于,所述确定单元确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则之前有与所述字节串相同的字节串,则继续滑动所述滑动窗,直到确定出与之前字节串相同的最长字节串,并确定出与之前相同的字节串的距离。
13、根据权利要求9所述的装置,其特征在于,所述确定单元确定出待压缩数据中相同的字节串,包括:
所设置的滑动窗从待压缩数据的首字节起逐字节地滑动,根据每次滑动后所述滑动窗中的字节串确定所述字节串在类表数组中的地址,判断所述地址中存储的数据是否为零,若为零则之前没有与所述字节串相同的字节串,不为零时,则确定出与所述字节串相同且距离最近的字节串,并继续滑动所述滑动窗,判断与前一滑动窗中所述字节串相同且距离最近的字节串的后一滑动窗中字节是否与当前的滑动窗中的字节串相同,确定出字节串相同的最长字节串,并判断字节串相同的最长字节串的字节数是否达到设定阈值,未达到时则判断是否还存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,直到确定出的字节串相同的最长字节串的字节数达到设定阈值;或确定不存在与第一次字节串相同的滑动窗中的字节串相同的其他字节串,并以所确定的字节串相同的最长字节串作为最终的相同的字节串。
14、一种嵌入式***的数据解压缩装置,其特征在于,包括:
确定单元,用于确定压缩数据中包含有压缩标识时,触发获取单元;
获取单元,用于获取代替字节串的距离及字节数目;以及
解压单元,用于在已解压的数据中所述距离处获取出所述字节数目的字节,并填入当前的解压数据中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100938637A CN101667843B (zh) | 2009-09-22 | 2009-09-22 | 嵌入式***的数据压缩、及解压缩方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100938637A CN101667843B (zh) | 2009-09-22 | 2009-09-22 | 嵌入式***的数据压缩、及解压缩方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101667843A true CN101667843A (zh) | 2010-03-10 |
CN101667843B CN101667843B (zh) | 2013-12-11 |
Family
ID=41804309
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100938637A Active CN101667843B (zh) | 2009-09-22 | 2009-09-22 | 嵌入式***的数据压缩、及解压缩方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101667843B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110145A (zh) * | 2011-02-15 | 2011-06-29 | 中国科学院计算技术研究所 | 一种微型fat文件***及其数据快速访问方法 |
CN103856296A (zh) * | 2010-07-16 | 2014-06-11 | 珠海中慧微电子有限公司 | 低压电力线载波通信的地址数据压缩算法 |
CN104699219A (zh) * | 2013-12-10 | 2015-06-10 | 联想(北京)有限公司 | 一种电子设备及信息处理方法 |
CN104951473A (zh) * | 2014-03-31 | 2015-09-30 | ***通信集团宁夏有限公司 | 对数据进行压缩的方法和装置 |
CN106850507A (zh) * | 2015-12-04 | 2017-06-13 | 北京航空航天大学 | 基于http压缩数据流的有害代码检测方法和装置 |
CN106982165A (zh) * | 2016-01-15 | 2017-07-25 | 厦门雅迅网络股份有限公司 | 数据压缩方法及其*** |
CN107682016A (zh) * | 2017-09-26 | 2018-02-09 | 深信服科技股份有限公司 | 一种数据压缩方法、数据解压方法及相关*** |
CN109033189A (zh) * | 2018-06-27 | 2018-12-18 | 阿里巴巴集团控股有限公司 | 链路结构日志的压缩方法、装置、服务器及可读存储介质 |
CN110446124A (zh) * | 2019-08-19 | 2019-11-12 | 深圳市双翼科技股份有限公司 | 基于光网络终端的单元远程管理方法、存储介质以及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6037883A (en) * | 1998-05-07 | 2000-03-14 | Microsoft Corporation | Efficient memory usage for two-pass compression |
DE10196513T1 (de) * | 2000-08-15 | 2003-11-13 | Seagate Technology Llc | Dualmodus-Datenkompression für einen Betriebscode |
-
2009
- 2009-09-22 CN CN2009100938637A patent/CN101667843B/zh active Active
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103856296A (zh) * | 2010-07-16 | 2014-06-11 | 珠海中慧微电子有限公司 | 低压电力线载波通信的地址数据压缩算法 |
CN103856296B (zh) * | 2010-07-16 | 2017-05-17 | 珠海中慧微电子有限公司 | 低压电力线载波通信的地址数据压缩算法 |
CN102110145A (zh) * | 2011-02-15 | 2011-06-29 | 中国科学院计算技术研究所 | 一种微型fat文件***及其数据快速访问方法 |
CN104699219A (zh) * | 2013-12-10 | 2015-06-10 | 联想(北京)有限公司 | 一种电子设备及信息处理方法 |
CN104699219B (zh) * | 2013-12-10 | 2020-06-23 | 联想(北京)有限公司 | 一种电子设备及信息处理方法 |
CN104951473A (zh) * | 2014-03-31 | 2015-09-30 | ***通信集团宁夏有限公司 | 对数据进行压缩的方法和装置 |
CN106850507B (zh) * | 2015-12-04 | 2020-01-14 | 北京航空航天大学 | 基于http压缩数据流的有害代码检测方法和装置 |
CN106850507A (zh) * | 2015-12-04 | 2017-06-13 | 北京航空航天大学 | 基于http压缩数据流的有害代码检测方法和装置 |
CN106982165A (zh) * | 2016-01-15 | 2017-07-25 | 厦门雅迅网络股份有限公司 | 数据压缩方法及其*** |
CN107682016A (zh) * | 2017-09-26 | 2018-02-09 | 深信服科技股份有限公司 | 一种数据压缩方法、数据解压方法及相关*** |
CN107682016B (zh) * | 2017-09-26 | 2021-09-17 | 深信服科技股份有限公司 | 一种数据压缩方法、数据解压方法及相关*** |
CN109033189A (zh) * | 2018-06-27 | 2018-12-18 | 阿里巴巴集团控股有限公司 | 链路结构日志的压缩方法、装置、服务器及可读存储介质 |
CN109033189B (zh) * | 2018-06-27 | 2021-08-24 | 创新先进技术有限公司 | 链路结构日志的压缩方法、装置、服务器及可读存储介质 |
CN110446124A (zh) * | 2019-08-19 | 2019-11-12 | 深圳市双翼科技股份有限公司 | 基于光网络终端的单元远程管理方法、存储介质以及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101667843B (zh) | 2013-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101667843B (zh) | 嵌入式***的数据压缩、及解压缩方法与装置 | |
US5955976A (en) | Data compression for use with a communications channel | |
CN100517979C (zh) | 一种数据压缩及解压缩方法 | |
US6489902B2 (en) | Data compression for use with a communications channel | |
CN103236847B (zh) | 基于多层哈希结构与游程编码的数据无损压缩方法 | |
CN112953550B (zh) | 数据压缩的方法、电子设备及存储介质 | |
US7990289B2 (en) | Combinatorial coding/decoding for electrical computers and digital data processing systems | |
CN102970043B (zh) | 一种基于gzip的压缩硬件***及其加速方法 | |
CN102122960A (zh) | 一种针对二进制数据的多字符组合无损数据压缩方法 | |
CN101783788A (zh) | 文件压缩、解压缩方法、装置及压缩文件搜索方法、装置 | |
CN101299611B (zh) | 一种基于集合游程的数据压缩方法 | |
CN101469989B (zh) | 一种手机网络导航中导航数据的压缩方法 | |
CN114900193A (zh) | 适应性霍夫曼编码***及方法 | |
CN103139567A (zh) | 一种图像压缩和解压缩的方法和装置 | |
CN104125475A (zh) | 一种多维量子数据压缩、解压缩方法及装置 | |
CN116016606A (zh) | 一种基于智慧云的污水处理运维数据高效管理*** | |
CN100578943C (zh) | 一种优化的霍夫曼解码方法和装置 | |
CN115189696A (zh) | 一种基于Huffman解码表的硬件压缩解压方法 | |
CN103078646A (zh) | 字典查询压缩、解压缩方法及其装置 | |
CN113312325B (zh) | 轨迹数据传输方法、装置、设备及存储介质 | |
CN112290953B (zh) | 多道数据流的阵列编码装置和方法、阵列解码装置和方法 | |
US6292115B1 (en) | Data compression for use with a communications channel | |
CN110113402B (zh) | 一种web服务通信的方法及装置 | |
CN112506876B (zh) | 一种支持sql查询的无损压缩查询方法 | |
US11569841B2 (en) | Data compression techniques using partitions and extraneous bit elimination |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |