本发明涉及通信技术领域,尤其涉及一种移动终端及数据包传输方法。
背景技术:
随着移动通信技术的发展,越来越多的移动终端如智能手机具有双卡双通的功能,使得用户在实现语音业务的待机同时,能建立数据业务连接。移动终端通常具有两个用户识别卡以及分别与所述两个用户识别卡连接的调制解调器,两个用户识别卡全开时,一个用户识别卡(sim1)可以使用4g(the4thgenerationmobilecommunicationtechnology,第四代移动通信技术),例如lte(longtermevolution,长期演进技术)网络,另一个用户识别卡(sim2)仅能使用2g(2-generationwirelesstelephonetechnology,第二代手机通信技术规格)或3g(3rdgeneration,第三代移动通信技术)网络,sim2不能上4g的原因主要是:移动终端只有一套射频,两张卡使用该套射频是分时复用的关系,并不能同时占用,由于两张卡全开时,只有一张卡可以使用4g网络,另一张卡只能使用2g或3g网络,导致移动终端中数据传输的效率较低。
因此,为了使移动终端可以支持双lte,以提高数据传输效率,移动终端可内置两个处理芯片,每个处理芯片对应一个调制解调器,以使移动终端的两张sim卡连接不同的调制解调器,从而实现双lte通信功能。但是,当移动终端中的用户识别卡是电信卡时,由于电信卡一般都大于调制解调器之间数据传输的buffer的容量值,因此buffer无法缓存一个完整的数据包,若是直接进行数据传输,容易导致移动终端死机。
技术实现要素:
本发明的主要目的在于提出一种移动终端及数据包传输方法,旨在解决现有的数据包传输方式,容易导致移动终端死机的技术问题。
为实现上述目的,本发明提供的一种移动终端,所述移动终端包括基于预设接口连接的第一处理芯片和第二处理芯片、与所述第一处理芯片连接的第一射频模块、以及与所述第二处理芯片连接的第二射频模块,所述第一处理芯片包括内嵌有虚拟用户识别卡的第一应用处理器以及与第一用户识别卡和第二用户识别卡连接的第一调制解调器,所述第二处理芯片包括第二应用处理器和第二调制解调器;
第一调制解调器,用于通过预设接口接收第二调制解调器发送的数据包获取请求时,从虚拟用户识别卡中提取所述数据包获取请求对应的数据包;对提取的数据包进行压缩;将压缩后的数据包缓存至所述预设接口的临时缓冲区buffer中,以供第二调制解调器从所述buffer中提取压缩后的数据包,以完成数据包的传输。
可选地,所述第一调制解调器,还用于判断能否从所述数据包获取请求中提取出第二调制解调器添加的压缩标识;若能提取出压缩标识,则对提取的数据包进行压缩。
可选地,所述第一调制解调器,还用于对提取的所述数据包进行解析,以得到所述数据包的包头;基于所述数据包的包头确定所述数据包的长度;在所述数据包的长度大于预设阈值时,则对提取的数据包进行压缩。
可选地,所述第一调制解调器对提取的数据包进行压缩具体包括:
所述第一调制解调器获取所述数据包对应的源文本;
确定源文本中出现频率大于预设频率的字符段;
在预设字典列表中,查找所述字符段对应的编码,其中,编码的长度小于对应的字符段的长度;
通过查找的编码代替对应的字符段,以实现数据包的压缩。
可选地,所述第一调制解调器还用于,确定源文本中是否存在内容相同且长度大于预设值的字符段;
若存在,确定后一个字符段与前一个字符端的距离以及所述字符段的长度;
采用距离与长度的标识代替后一个字符段,以实现数据包的压缩。
此外,为实现上述目的,本发明还提供一种数据包传输方法,所述数据包传输方法应用于移动终端,所述移动终端包括基于预设接口连接的第一处理芯片和第二处理芯片、与所述第一处理芯片连接的第一射频模块、以及与所述第二处理芯片连接的第二射频模块,所述第一处理芯片包括内嵌有虚拟用户识别卡的第一应用处理器以及与第一用户识别卡和第二用户识别卡连接的第一调制解调器,所述第二处理芯片包括第二应用处理器和第二调制解调器,所述方法包括:
第一调制解调器通过预设接口接收第二调制解调器发送的数据包获取请求时,从虚拟用户识别卡中提取所述数据包获取请求对应的数据包;
对提取的数据包进行压缩;
将压缩后的数据包缓存至所述预设接口的临时缓冲区buffer中,以供第二调制解调器从所述buffer中提取压缩后的数据包,以完成数据包的传输。
可选地,所述对提取的数据包进行压缩的步骤之前,所述数据包传输方法还包括:
所述第一调制解调器判断能否从所述数据包获取请求中提取出第二调制解调器添加的压缩标识;
若能提取出压缩标识,则执行所述对提取的数据包进行压缩的步骤。
可选地,所述对提取的数据包进行压缩的步骤之前,所述数据包传输方法还包括:
所述第一调制解调器对提取的所述数据包进行解析,以得到所述数据包的包头;
基于所述数据包的包头确定所述数据包的长度;
在所述数据包的长度大于预设阈值时,执行所述对提取的数据包进行压缩的步骤。
可选地,所述对提取的数据包进行压缩的步骤包括:
所述第一调制解调器获取所述数据包对应的源文本;
确定源文本中出现频率大于预设频率的字符段;
在预设字典列表中,查找所述字符段对应的编码,其中,编码的长度小于对应的字符段的长度;
通过查找的编码代替对应的字符段,以实现数据包的压缩。
可选地,所述第一调制解调器获取所述数据包对应的源文本的步骤之后,所述对提取的数据包进行压缩的步骤还包括:
确定源文本中是否存在内容相同且长度大于预设值的字符段;
若存在,确定后一个字符段与前一个字符端的距离以及所述字符段的长度;
采用距离与长度的标识代替后一个字符段,以实现数据包的压缩。
本发明提出的技术方案,所述移动终端包括基于预设接口连接的第一处理芯片和第二处理芯片、与所述第一处理芯片连接的第一射频模块、以及与所述第二处理芯片连接的第二射频模块,所述第一处理芯片包括内嵌有虚拟用户识别卡的第一应用处理器以及与第一用户识别卡和第二用户识别卡连接的第一调制解调器,所述第二处理芯片包括第二应用处理器和第二调制解调器;第一调制解调器通过预设接口接收第二调制解调器发送的数据包获取请求时,先从虚拟用户识别卡中提取所述数据包获取请求对应的数据包,然后对提取的数据包进行压缩,再将压缩后的数据包缓存至所述预设接口的buffer中,以供第二调制解调器从所述buffer中提取压缩后的数据包,以完成数据包的传输。本方案在传输数据包时,先对待传输的数据包进行压缩,再将压缩后的数据包进行传输,使得传输的数据包的容量值有所减小,避免了数据传输过程中移动终端死机的情况。
附图说明
图1为本发明一实施例的lte网络架构的示意图;
图2为本发明实施例中移动终端的一种硬件结构示意图;
图3为本发明第一调制解调器和第二调制解调器之间的交互示意图;
图4为本发明数据包传输方法第一实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互任意结合。
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
图1是本发明一实施例的lte网络架构的示意图。本发明一实施例的lte网络架构包括:一个或多个移动终端(userequipment,ue)100、e-utran(evolvedumtsterrestrialradioaccessnetwork,演进的umts陆地无线接入网)(图中未标号)、演进分组核心(epc)(图中未标号)、归属订户服务器(hss)107、网络(例如,因特网)(图中未标号)以及电路交换系统(图中未标号)。
e-utran包括演进b节点(enodeb)101和其它enodeb102。enodeb101提供朝向移动终端100的用户面和控制面的协议终接。enodeb101可经由x2接口连接到其他enodeb。enodeb101也可称为基站、基收发机站、无线电基站、无线电收发机、收发机功能、基本服务集、扩展服务集、或其他某个合适的术语。enodeb101为移动终端100提供去往epc的接入点。
enodeb101通过s1接口连接到epc。epc包括移动管理实体(eem)104、其他移动管理实体106、服务网关103,以及分组数据网络(pdn)网关105。移动管理实体104是处理移动终端100与epc之间的信令的控制节点。移动管理实体104提供承载和连接管理。所有用户ip分组通过服务网关103来传递,服务网关103自身连接到pdn网关105。pdn网关105提供ueip地址分配以及其他功能。pdn网关105连接到网络,例如,因特网。
电路交换系统包括交互解决方案模块(iws)108、移动交换中心(msc)109、基站110和移动站111。在一个方面,电路交换系统可以通过iws和mme(mobilitymanagemententity,移动管理实体)与eps(evolvedpacketsystem,演进的分组系统)进行通信。
图2为本发明实施例中移动终端100的一种硬件结构示意图。
在本发明实施例中,移动终端100包括第一处理芯片001和第二处理芯片002,与所述第一处理芯片001连接的第一射频模块12、以及与所述第二处理芯片002连接的第二射频模块22。其中,第一处理芯片001和第二处理芯片002通过预设接口连接。所述预设接口包括第一预设接口和第二预设接口。第一处理芯片001包括内嵌有虚拟用户识别卡10a的第一应用处理器(applicationprocessor,用ap1表示)10、与第一用户识别卡13和第二用户识别卡14连接的第一调制解调器11(modem1)、rpm(resourcepowermanager,资源电源管理器)15。第二处理芯片002包括第二应用处理器20和第二调制解调器(modem2)21。其中,虚拟用户识别卡10a包括存储模块和虚拟片内操作系统(virtualchipoperatingsystem,vcos),该存储模块可为efs(encryptingfilesystem,加密文件系统),存储模块用于存储虚拟用户识别卡10a的鉴权数据。用户识别卡(第一用户识别卡13和第二用户识别卡14)为sim(subscriberidentitymodule,用户识别模块)卡。
第一应用处理器10和第二应用处理器20的内部框架包括应用层、框架层等,可处理复杂的逻辑操作以及进行任务分配等。在本发明实施例中,应用处理器指android操作系统,以及基于android操作系统的各种apk(androidpackage,安卓安装包)。
在本发明的实施例中,第一应用处理器10和第二应用处理器20通过第一预设接口实现连接,为用户提供交互接口,将用户输入的操作指令(例如,用户通过用户界面输入的有关启动视频通话的操作指令)传输给第一调制解调器11或第二调制解调器21,以实现两个应用处理器之间数据的定义与传递,例如,进行两个应用处理器的休眠、唤醒、同步的控制、开关机时芯片启动顺序的控制等。其中,第一预设接口为usb(universalserialbus,通用串行总线)。应当理解的是,在本发明实施例中,usb数据线复用出两条数据通道,分别用于第一应用处理器10和第二应用处理器20之间用户数据和控制信令数据的交互,即第一应用处理器10和第二应用处理器20通过usb数据线传输的数据包括上述两种数据。其中,用户数据包括上网产生的数据,图片和聊天信息数据;控制信令数据包括开关机的控制数据,开关飞行模式的控制数据,显示状态信号的控制数据。
本实施例中,第一应用处理器10和第二应用处理器20通过otg(on-the-go)技术进行数据交互。通过otg技术,移动终端100中的第一调制解调器11可通过第一用户识别卡13中的sim卡参数来接入enodeb101,第二调制解调器21可通过第二用户识别卡14中的sim卡参数来接入enodeb101;或者第一调制解调器11通过第二用户识别卡14中的sim卡参数来接入enodeb101,第二调制解调器21通过第一用户识别卡13中的sim卡参数来接入enodeb101。sim卡参数包括但不限于sim卡鉴权数据。当然,还可以用虚拟用户识别卡10a代替上述的第一用户识别卡13或第二用户识别卡14以实现相应的功能。
第一调制解调器11和第二调制解调器21通过第二预设接口连接。在本发明实施例中,第二预设接口为uart(universalasynchronousreceiver/transmitter,通用异步收发传输器)。uart用于第一调制解调器11和第二调制解调器21之间sim卡参数的传输。其中,uart接口的buffer存在于第一调制解调器11和第二调制解调器21的两端,用buffer1和buffer2表示。需要说明的是,buffer1和buffer2对应着同一个物理地址,通过该物理地址,可控制buffer1和buffer2容量值和状态的同步变化。
具体地:第二调制解调器21通过第二射频模块22接收到基站发送的sim卡数据获取请求时,将数据获取请求传送至第一调制解调器11中,由第一调制解调器11反馈响应的sim卡数据。
其中,所述sim卡数据获取请求的触发方式包括两种:
a、第二调制解调器21主动注册lte网络,以触发sim卡数据获取请求;
b、基站侧需要鉴权用户是否合法,将鉴权请求发给第二调制解调器21,由第二调制解调器21主动发sim卡数据获取请求。
第二调制解调器21通过第二射频模块22接收到基站发送的sim卡数据获取请求时,通过uart将数据获取请求传送至第一调制解调器11中,由第一调制解调器11根据数据获取请求从虚拟用户识别卡10a、第一用户识别卡13或第二用户识别卡14获取数据,下文以第一调制解调器11根据数据获取请求从第一用户识别卡13中获取数据为例进行详述。
需要理解的是,第一用户识别卡13中包括有cos(chipoperatingsystem,片内操作系统)操作系统和存储模块,其中,所述cos操作系统作为存储模块的文件代理,根据所述第一调制解调器11发送的数据获取请求从所述存储模块中提取数据,所述存储模块用来存储数据。即,本发明实施例中,第一调制解调器11是无法与第一用户识别卡13内部的存储模块进行交互以获取数据,只能通过cos操作系统进行获取。因此,当所述第一调制解调器11将数据获取请求发送至第一用户识别卡13时,第一用户识别卡13内部的cos操作系统解析出所述数据获取请求的地址信息,然后根据所述地址信息,从所述存储模块中获取所述地址信息对应的数据。当所述cos操作系统从存储模块中获取到数据之后,将获取的数据反馈至所述第一调制解调器11。
第一调制解调器11在获取到cos操作系统反馈的数据之后,将数据通过uart发送给第二调制解调器21,最终第二调制解调器21通过第二射频模块22将数据上传至基站,以完成鉴权。
由于上文已经说明,buffer1和buffer2对应着同一个物理地址,因此第一调制解调器11将提取的数据包缓存至buffer1时,数据包通过该uart发送至buffer2中缓存,第二调制解调器21在buffer2中检测到该数据包时,即可获取到该数据包,以实现数据包的传输。
可以理解的是,通过第一预设接口和/或第二预设接口,即可可实现第一处理芯片001和第二处理芯片002之间的连接。
第一调制解调器11和第二调制解调器21包含各种网络交互的网络制式的协议栈,协议栈包含lte(longtermevolution,长期演进)/wcdma(widebandcodedivisionmultipleaccess,宽带码分多址)/gsm(globalsystemformobilecommunication,全球移动通信系统)/td-scdma(timedivision-synchronouscodedivisionmultipleaccess,同步时分码分多址)/cdma(codedivisionmultipleaccess,码分多址)/edge(enhanceddatarateforgsmevolution,强型数据速率gsm演进技术)等通讯标准里边规定的协议代码。移动终端100通过协议与运营商网络进行交互,即进行数据流量上网、volte(voiceoverlte)打电话或者cs(circuitswitched,电路交换)域打电话。第一调制解调器11和第二调制解调器21还用于对sim卡的管控等等。
在本发明实施例中,第一射频模块12用于将第一处理芯片001传输的数据处理后传给enodeb101(基站网络),以及用于将enodeb101传输的数据处理后传给第一处理芯片001。第二射频模块22用于将第二处理芯片002传输的数据处理后传给enodeb101(基站网络),以及用于将enodeb101传输的数据处理后传给第二处理芯片002。
第一射频模块12和第二射频模块22所涉及的无线接入技术可以包括lte、gsm、gprs(generalpacketradioservice,通用分组无线服务)、cdma、edge、wlan(wirelesslocalareanetworks,无线局域网)、cdma-2000、td-scdma、wcdma、wifi(wirelessfidelity,无线保真)等等。
移动终端100中的虚拟用户识别卡10a、第一用户识别卡13和第二用户识别卡14存储不同的无线通信标准相关联的用户信息。应当理解,目前的移动终端只有一套射频,移动终端内部的两个用户识别卡使用该套射频是分时复用的关系,并不能同时占用。例如,在两张用户识别卡全开时,一张卡可以处理gsm通话,另一张卡只能处理4g网络信息,具体哪个用户识别卡执行何种网络,不做限定。因此目前的射频双卡分时复用这种架构仅做到了lte+gsm(即一张用户识别卡对应的技术标准为lte,另一张用户识别卡对应的技术标准为gsm)。
也就是说,现有的移动终端100虽然可以支持双用户识别卡,但是移动终端100在注册网络的情况下,两个用户识别卡支持的是不同技术标准的网络,一个支持2g或3g,另一个支持4g,会使得移动终端100使用过程中,上网流量速度较慢,因此本发明中,移动终端100通过预设接口连接第一处理芯片001和第二处理芯片002,由于第二处理芯片002包括第二调制解调器21、并连接第二射频模块22,且第二射频模块22支持4g网络。因此,移动终端100可通过第一处理芯片001和第二处理芯片002具备双lte功能。当然,可用虚拟用户识别卡10a替代上述的第一用户识别卡13和第二用户识别卡14,具体不做赘述。
在本实施例中,虚拟用户识别卡10a、第一用户识别卡13和第二用户识别卡14用于提供移动通信业务(cs语音业务、ps数据业务和ps语音业务)所需的相关数据,并在其内部存储用户信息、短消息、执行鉴权算法和产生加密密匙等。
用户识别卡(虚拟用户识别卡10a、第一用户识别卡13和第二用户识别卡14)与移动终端100交互时,移动终端100检测该用户识别卡存在与否的信号只在开机瞬时产生,当开机检测不到用户识别卡存在时,移动终端100将提示“插入用户识别卡”。移动终端100开机之后,移动终端100和用户识别卡之间28秒通信一次,完成一些固定的通信检查(例如,用户识别卡是否在位等)。
在本发明的实施例中,虚拟用户识别卡10a、第一用户识别卡13和第二用户识别卡14承载信息,并且根据外界请求返回对应卡参数,以及对网络进行鉴权运算,第一射频模块12和第二射频模块22所涉及的无线接入技术为lte。例如,当第一应用芯片001和第二应用芯片002连接时,第一用户识别卡13可通过移动终端100中的第一调制解调器11支持lte,而第二用户识别卡14通过第二调制解调器21支持lte;或者,第一用户识别卡13可通过第二调制解调器21支持lte,而第二用户识别卡14通过第一调制解调器11支持lte,以实现移动终端100可支持双lte。
移动终端100中的rpm15用于管控各种资源,包括时钟资源、总线资源、pmic(powermanagementic,电源管理集成电路,即各个芯片的电压)、ddr(内存分配),以及管理芯片的休眠唤醒的中断和应用处理器唤醒的截止时间。移动终端100的各个子系统,在需要资源时,向rpm15申请资源,各个子系统分别包括第一应用处理器10,第一调制解调器11、pronto(wifi/蓝牙、nfc(nearfieldcommunication,近场通信)等)、lpass(lowpoweraudiosubsystem,低功耗音频子系统),rpm15用来决定移动终端100系统的休眠状态,具体是,rpm15基于各个子系统的投票机制实现,当各个子系统都投休眠票时,rpm15才可以使移动终端100整个系统进行休眠。在移动终端100的整个系统休眠之后,若是要重新启动运行,第二处理芯片002可自动唤醒,但是第一处理芯片001需要第二处理芯片002唤醒,以进行数据的传输交互。
在本发明实施例中,第一处理芯片001和第二处理芯片002之间通过预设接口连接的情况下,唤醒方式可为以下三种:
1、第一应用处理器10接收到控制信令数据时,通过usb接口传送探测包给第二应用处理器20,以唤醒第二应用处理器20。
2、第二调制解调器21接收到用户数据时,唤醒第二应用处理器20,由第二应用处理器20通过usb接口传送探测包给第一应用处理器10,以唤醒第一应用处理器10。
3、第二调制解调器21周期性查找寻呼请求,以主动激活自己,若接收到寻呼请求,唤醒第二应用处理器20,由第二应用处理器20通过usb接口发送探测包给第一应用处理器10,以唤醒第二应用处理器20。
此外,第二调制解调器21还可以定期唤醒自己,以在移动终端100进行位置更新时,跟基站进行握手交互,此时不需要唤醒第一应用处理器10。
在本发明实施例中,移动终端包括但不限于手机、pc(personalcomputer,个人电脑)或pad(personaldigitalassistant,个人数字助理)。
需要说明的是,传输的数据包为用户数据或控制信令数据时,用户数据或控制信令数据在应用处理器之间传输;当传输的数据包为用户识别卡数据即sim卡数据时,sim卡数据只会在调制解调器之间传输;由于本发明实施例主要针对电信卡即sim卡传输数据导致终端死机的情况,因此本实施例中的数据包主要是在调制解调器之间传输的数据包。
本实施例中,sim卡包括移动卡、联通卡和电信卡,其中,移动卡和联通卡是指采用3gpp标准协议进行通讯的电话卡,3gpp标准协议规定了电话卡传输数据包的容量不能超出一定值,该值设置为512个字节;而电信卡是指采用3gpp2标准协议的电话卡,gpp2标准协议对电信卡传输的数据包的容量未做限制,电信卡传输的数据包的容量一般会超出512字节。其中,移动卡是由中国移动(运营商)向用户提供的sim卡,联通卡是由中国联通(运营商)向用户提供的sim卡,电信卡是由中国电信(运营商)向用户提供的sim卡。
由于现有的buffer的容量一般都不超过512个字节。因此,当移动终端100中的虚拟用户识别卡10a、第一用户识别卡13和第二用户识别卡14都是移动卡或者是联通卡时,由于移动卡或者是联通卡收发数据包的数据容量小于512个字节的,因此,第一调制解调器11接收到数据包获取请求时,从虚拟用户识别卡10a、第一用户识别卡13和第二用户识别卡14获取到的数据包也是小于512个字节,相应的,存储到buffer的数据包也是小于512个字节的,因此,数据包可完整的存储到buffer中,后续,第二调制解调器21也可以取出一个完整的数据包。
但是,由于电信卡一般大于512字节,因此,在第一调制解调器11和第二调制解调器21的数据交互过程中,若是第一调制解调器11中连接的是电信卡,会出现这样的情况:
以图2为例,在虚拟用户识别卡10a、第一用户识别卡13和第二用户识别卡14为电信卡的情况下,移动终端100的第一调制解调器11从虚拟用户识别卡10a、第一用户识别卡13中或第二用户识别卡14提取出一个数据包,由于该数据包大于512字节,而buffer一次性只能缓存不超过512字节的数据包,这种情况下,会由于无法转发大数据包导致移动终端的系统死机。
若是要解决这个问题,按照常规的思路,不会将该数据包一次性进行转发,而是拆分成多个数据包进行转发,但是对于第二调制解调器21而言,当从buffer检测到有数据包时,认为该数据包是完整的数据包,此时第二调制解调器21直接从buffer获取该数据包,并将该数据包转发至基站。很明显,这种情况下,转发的数据包是不完整的数据包。
基于上述lte网络的架构图、移动终端100的硬件结构示意图以及现有技术存在的问题,提出本发明的各个实施例。
参照图2,本实施例提出一种移动终端,所述移动终端包括基于预设接口连接的第一处理芯片001和第二处理芯片002、与所述第一处理芯片001连接的第一射频模块12、以及与所述第二处理芯片002连接的第二射频模块22,所述第一处理芯片001包括内嵌有虚拟用户识别卡10a的第一应用处理器10以及与第一用户识别卡13和第二用户识别卡14连接的第一调制解调器11,所述第二处理芯片002包括第二应用处理器20和第二调制解调器21,
第一调制解调器11,用于通过预设接口接收第二调制解调器21发送的数据包获取请求时,从虚拟用户识别卡10a中提取所述数据包获取请求对应的数据包;
对提取的数据包进行压缩;
将压缩后的数据包缓存至所述预设接口的临时缓冲区buffer中,以供第二调制解调器21从所述buffer中提取压缩后的数据包,以完成数据包的传输。
在本实施例中,所述第一调制解调器11通过预设接口接收第二调制解调器21发送的数据包获取请求,后续也是通过所述预设接口将数据包反馈至所述第二调制解调器21。所述预设接口为uart接口。
其中,当第二处理芯片002的第二调制解调器21通过第二射频模块22接收到基站发送的数据包获取请求时,先通过uart将数据包获取请求传送给第一处理芯片001的第一调制解调器11;第一调制解调器11接收到该数据包获取请求后,根据数据包获取请求从虚拟用户识别卡10a中获取数据包;第一调制解调器11在获取到数据包之后,为了保证传输的数据不会大于uart的buffer,先对获取的数据包进行压缩,得到压缩后的数据包;再通过uart将压缩后的数据包传送至第二调制解调器21;第二调制解调器21接收到数据包后,再通过第二射频模块22将数据包上传至基站,以完成数据包的传输。
本实施例中,第一调制解调器11不限于从虚拟用户识别卡10a中获取数据包,当然,也可根据实际需要在第一用户识别卡13或第二用户识别卡14中获取数据包,第一调制解调器11在虚拟用户识别卡10a、第一用户识别卡13或第二用户识别卡14中获取数据包的方式一致,下文为了简述,仅以在虚拟用户识别卡中获取数据包为例,其它两种不再赘述。
具体地,所述第一调制解调器11从虚拟用户识别卡10a中提取所述数据包获取请求对应的数据包具体包括:
所述第一调制解调器11向虚拟用户识别卡10a中的片内操作系统发送数据包获取请求,由所述片内操作系统在虚拟用户识别卡10a中的文件存储模块中提取所述数据包获取请求对应的数据包,并反馈至所述第一调制解调器11;
所述第一调制解调器11接收片内操作系统反馈的数据包。
在本实施例中,需要说明的是,虚拟用户识别卡10a中的数据包存储在文件存储模块中,当第一调制解调器11要获取虚拟用户识别卡10a中的数据包时,第一调制解调器11不会直接与虚拟用户识别卡10a中的文件存储模块交互,而是先向虚拟用户识别卡10a中的cos(chipoperatingsystem,片内操作系统)操作系统发送数据包获取请求即request,然后虚拟用户识别卡10a的cos操作系统基于该request在文件存储模块中获取数据包,然后将获取的数据包再传输给第一调制解调器11,第一调制解调器11只要接收cos操作系统反馈的数据包即可实现数据包的获取过程。
可以理解,由于第一调制解调器11无法在虚拟用户识别卡10a中的文件存储模块直接提取数据包,因此通过与虚拟用户识别卡10a的cos操作系统进行交互,以实现数据包的提取,保证后续的数据传输过程正常运行。
当第一调制解调器11从虚拟用户识别卡10a中提取出数据包获取请求对应的数据包之后,再对提取的数据包进行压缩,本实施例中,第一调制解调器11对数据包进行压缩时,可以采用加密压缩的方式进行数据包的压缩,也可以直接采用明文进行压缩。由于传输的sim卡网络鉴权数据量比较小,为了减少加密解密等操作而导致数据传输效率低,本发明实施例优选采用明文压缩的方式对数据包进行压缩,即本方案中采用的压缩算法以简单高效为主,具体采用的压缩算法和压缩过程在下文实施例中详述。
第一调制解调器11对数据包压缩之后,即可将压缩后的数据包缓存至所述预设接口uart的buffer中,以供第二调制解调器21从所述buffer中提取压缩后的数据包,以完成数据包的传输。
本实施例中需要说明的是,buffer存在于uart接口的两端,即uart接口的两端分别设置有buffer1和buffer2。当第二调制解调器21通过第二射频模块22接收到基站发送的数据获取请求时,将数据包获取请求通过uart接口发送给第一调制解调器11,第一调制解调器11从虚拟用户识别卡10a提取出数据包之后,先将提取的数据包存储到buffer1中,以通过uart传输至第二调制解调器21的buffer2中,第二调制解调器21再从buffer2中获取数据包。
本实施例提出的移动终端,第一调制解调器通过预设接口接收第二调制解调器发送的数据包获取请求时,先从虚拟用户识别卡中提取所述数据包获取请求对应的数据包,然后对提取的数据包进行压缩,再将压缩后的数据包缓存至所述预设接口的buffer中,以供第二调制解调器从所述buffer中提取压缩后的数据包,以完成数据包的传输。本方案在传输数据包时,先对待传输的数据包进行压缩,再将压缩后的数据包进行传输,使得传输的数据包的容量值有所减小,避免了数据传输过程中移动终端死机的情况。
进一步地,基于第一实施例提出本发明移动终端第二实施例。
移动终端第二实施例与移动终端第一实施例的区别在于,所述第一调制解调器11,还用于判断能否从所述数据包获取请求中提取出第二调制解调器21添加的压缩标识;若能提取出压缩标识,则对提取的数据包进行压缩。
在本实施例中,当第二调制解调器21向第一调制解调器11发送数据包获取请求(request)之前,为了防止传输的数据包过大,第二调制解调器21发送request时,先确定是否需要在request中添加压缩标识,若需要,则先在request中添加一个压缩标识,如添加字段01,以告知第一调制解调器11对待发送的数据包进行压缩。
需要说明的是,由于待传输的数据是根据通讯协议标准确定的,因此,第二调制解调器21可以得知即将获取的数据包的数据类型和数据大小,那么,当第二调制解调器21发送request之前,先判断当前待获取的数据包的大小,若待获取的数据包的大小超出了buffer的容量值,则第二调制解调器21在request中添加压缩标识,以告知第一调制解调器11对待传输的数据包进行压缩,若第二调制解调器21判断待获取的数据包的大小未超出buffer的容量值,则直接发送request即可,无需添加压缩标识。
在本实施例中,第二调制解调器21发送request之前,对待获取的数据包的大小进行识别,仅在待获取的数据包超出buffer的容量值时,才在request添加压缩标识,避免了所有的数据包获取请求都添加压缩标识,缩短了数据包传输的时间,提高了数据包传输的效率。
当第一调制解调器11通过预设接口(uart)接收第二调制解调器21发送的数据包获取请求时,先对所述数据包获取请求进行解析,以确定能否从所述数据包获取请求中提取出第二调制解调器21添加的压缩标识,若在所述数据包获取请求中提取出压缩标识,此时,所述第一调制解调器11即可对提取的数据包进行压缩,后续再将压缩后的数据包缓存至所述预设接口的buffer1中,并通过uart传输至buffer2中,以供第二调制解调器21从所述buffer2中提取压缩后的数据包,以完成数据包的传输。
在本实施例中,数据包传输过程是发生第一调制解调器11和第二调制解调器21唤醒之后,那么当第一调制解调器11和第二调制解调器21唤醒之后,若第二调制解调器21通过第二射频模块22接收到基站发送的数据包获取请求,执行以下操作:
判断:先确定待获取的数据包的大小,以判断是否需要添加压缩标识;
决策:若待获取的数据包超过uart的buffer的容量,则在发送数据包获取请求之前,在数据包获取请求添加压缩标识;
发送:在数据包获取请求添加压缩标识之后,发送数据包获取请求。
第一调制解调器11通过uart接收到数据包获取请求时,执行以下操作:
提取:确定能否从数据包获取请求中提取出压缩标识,若能,则提取出压缩标识;
压缩:基于提取的压缩标识,对从虚拟用户识别卡10a提取的数据包进行压缩;
反馈:反馈压缩的数据包。
最终,第二调制解调器21通过uart接收第一调制解调器11反馈的数据包,以完成数据包传输过程。上述的操作过程,可参照图3。
需要说明的是,第二调制解调器21发送的是数据包获取请求,由于数据包获取请求一般都小于buffer的容量,因此可不对数据包获取请求进行压缩。
在本实施例中,第一调制解调器11在对数据包进行压缩之前,先判断能否从所述数据包获取请求中提取出第二调制解调器21添加的压缩标识,若能提取出压缩标识,才对数据包进行压缩,防止数据包小于buffer的容量时也进行压缩,以防止系统资源的浪费,并且节省了数据包传输的时间,从而提高了数据包传输的效率。
进一步地,基于第一实施例提出本发明移动终端第三实施例。
移动终端第三实施例与移动终端第一实施例的区别在于,所述第一调制解调器11,还用于对提取的所述数据包进行解析,以得到所述数据包的包头;基于所述数据包的包头确定所述数据包的长度;在所述数据包的长度大于预设阈值时,则对提取的数据包进行压缩。
在本实施例中,所述第一调制解调器11对数据包进行压缩之前,先对从第一用户识别卡13或第二用户识别卡14中提取的数据包进行解析,以得到所述数据包的包头,然后从包头中获取数据包的长度,以确定该数据包的大小。其中,数据包为tlv格式,tlv格式是ber(basicencodingrules,基本编码规则)编码的一种,全称为type(类型),length(长度),value(值),t字段表示数据包的类型,l字段表示数据包的长度、v字段用于存放数据包的内容。
本实施例中,该数据包的生成过程为:传输层获取到数据包对应的原始数据,并为原始数据添加传输层的数据包头,数据包头包括传输层数据类型和数据长度,得到初始数据包,并将初始数据包传输至传输复用层。当传输复用层接收到初始数据包后,为初始化数据包添加传输复用层的数据包头,数据包头包括复用层的数据类型和数据长度,得到数据包,并调用物理驱动层的发送接口将该数据包发送给物理层。后续,第一调制解调器11对提取的所述数据包进行解析,就是从物理层(物理传输介质)之上的物理驱动层检测数据包的包头,以解析得到数据包的大小(长度)。
当第一调制解调器11确定数据包的长度后,再判断该数据包的长度是否大于预设阈值(即buffer的容量值)。在本实施例中,所述预设阈值可选为512字节,在其它实施例中,也可以将所述预设阈值设置为其它长度,在此不再限定。当数据包的长度大于所述预设阈值时,为了防止数据包传输导致终端死机,所述第一调制解调器11对提取的数据包进行压缩。可以理解,若提取的数据包的长度小于预设阈值,所述第一调制解调器11可直接通过uart接口发送该数据包至第二调制解调器21。
在本实施例中,在对数据包进行压缩之前,所述第一调制解调器对提取的所述数据包进行解析,以得到所述数据包的包头,再确定所述数据包的长度,仅在数据包的长度大于预设阈值时,才对提取的数据包进行压缩,从而提高了数据包压缩的准确性。
进一步地,基于第一至第三实施例提出本发明移动终端第四实施例。
移动终端第四实施例与移动终端第一至第三实施例的区别在于,所述第一调制解调器11对提取的数据包进行压缩具体包括:
获取所述数据包对应的源文本;
确定源文本中出现频率大于预设频率的字符段;
在预设字典列表中,查找所述字符段对应的编码,其中,编码的长度小于对应的字符段的长度;
通过查找的编码代替对应的字符段,以实现数据包的压缩。
在本实施例中,所述第一调制解调器11对数据包进行压缩,具体地,先获取数据包对应的源文本,然后确定源文本中出现频率大于预设频率的字符段,再从预设字典列表中,查找所述字符段对应的编码,其中,编码的长度小于对应的字符段的长度,最终通过查找的编码代替对应的字符段,以实现数据包的压缩。
该过程涉及的算法为字典算法,字典算法是最为简单的压缩算法之一。该字典算法把文本中出现频率大于预设一定值的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇,例如,当前的字典列表中:
00=chinese
01=people
02=china
若当期数据包中的源文本为:iamachinesepeople,iamfromchina。那么,采用该字典算法,压缩后的编码为:iama0001,iamfrom02。
可以理解,压缩编码后的长度显著缩小,这样的编码专有名词或者固定组合较多的内容中,压缩效率十分显著,将预定的文本内容用字典中预定的编码映射替代,解压缩的时候执行反向还原即可。
进一步地,所述第一调制解调器11,还用于依次确定源文本中高四位为零且相邻的任两个字符段;
将所述任两个字符段的高四位进行删除,并将所述任两个字符段的低四位进行组合,以实现数据包的压缩。
即,所述第一调制解调器11获取到数据包对应的源文本之后,还可依次确定源文本中高四位为零且相邻的任两个字符段,再将任两个字符段的高四位进行删除,并将任两个字符段的低四位进行组合,以实现数据包的压缩。
该过程涉及的算法为固定位长算法(fixedbitlengthpacking),这种算法是把文本用需要的最少的位来进行压缩编码。比如:八个十六进制数:1,2,3,4,5,6,7,8。转换为二进制为:00000001,00000010,00000011,00000100,00000101,00000110,00000111,00001000。每个数只用到了低4位,而高4位没有用到(全为0),因此对低4位进行压缩编码后得到:0001,0010,0011,0100,0101,0110,0111,1000。然后两两补充为8位字节得到:00010010,00110100,01010110,01111000。所以原来的八个十六进制数缩短了一半,得到4个十六进制数:12,34,56,78。
可以理解,通过这种组合方式,将需要用到的位数进行了缩小,使得数据包的容量有所减小,同理,解压时执行反响拆分添加组合即可。
进一步地,所述第一调制解调器11,还用于对源文本中连续出现的字符,采用重复次数加字符进行代替,以实现数据包的压缩。
即,所述第一调制解调器11获取到数据包对应的源文本之后,还可对源文本中连续出现的字符,采用重复次数加字符进行代替,以实现数据包的压缩。
该过程涉及的算法为rle(runlengthencoding,游程编码,又译行程长度编码)算法,这种压缩编码是一种变长的编码,rle根据文本不同的具体情况会有不同的压缩编码变体与之相适应,以产生更大的压缩比率。具体地:
变体1:重复次数+字符
文本字符串:aaabbbccccdddd,编码后得到:3a3b4c4d;通过该变体算法,即可将数据包终端文本字符串进行压缩。
变体2:特殊字符+重复次数+字符
文本字符串:aaaaabccccbccc,编码后得到:bb5abb4cbb3c;其中,该编码串的最开始说明特殊字符为b,然后再添加一个b,b后面跟着的数字就表示出重复的次数。也就是说,文本串字符采用该变体2算法进行编码压缩时,先在编码后的编码串的首字母说明特殊字符为b,然后由于后面紧接着出现5个字符a,需要在这5个字符a之前添加一个特殊字符即字符b,因此就是bb5a,在5a之后出现b,且b之后又出现3个c,因此,需要在3个c之前再添加一个特殊字符b,与前面连接起来就是bb5abb4c,后面采用同样的方式,即可得到最终的编码串bb5abb4cbb3c。
为了更清楚理解该方案,举另一个例子:文本字符串仍然为:aaaaabccccbccc,若当前编码串的最开始说明特殊字符为d,那么,编码后得到:dd5abd4cbd3c。
变体3:
把文本每个字节分组成块,每个字符最多重复127次。每个块以一个特殊字节开头。那个特殊字节的第7位如果被置位,那么剩下的7位数值就是后面的字符的重复次数。如果第7位没有被置位,那么剩下7位就是后面没有被压缩的字符的数量。
例如:文本字符串:aaaaabcdefff,编码后得到:85a4bcde83f(85h=10000101b、4h=00000100b、83h=10000011b)。其中,先将文本字符串分组成三个块,分别是aaaaa、bcde和fff,三个快对应的特殊字符分别是10000101、00000100和10000011,由于10000101中第7位被置位为1,因此剩下的7位数值为后面的字符的重复次数,此时可知剩下的7位数值对应的值为5,即可得到85a;同理,由于00000100中的第7位没有被置位为1,那么剩下7位是后面没有被压缩的字符的数量,可知此时剩下7位对应的值为4,即可得到4bcde;同理可确定83f,此处不在赘述。
需要说明的是,以上所列举出的三种3种rle变体算法仅仅是较佳的几种变体算法,本领域技术人员利用本发明的技术思想,根据其具体需求所提出的其它rle变体算法均在本发明的保护范围内,在此不进行一一穷举。
进一步地,所述第一调制解调器11,还用于确定源文本中是否存在内容相同且长度大于预设值的字符段;
若存在,确定后一个字符段与前一个字符端的距离以及所述字符段的长度;
采用距离与长度的标识代替后一个字符段,以实现数据包的压缩。
即,所述第一调制解调器11获取到数据包对应的源文本之后,还可确定源文本中是否存在内容相同且长度大于预设值的字符段,若存在,确定后一个字符段与前一个字符端的距离以及字符段的长度,采用距离与长度的标识代替后一个字符段,以实现数据包的压缩。
该过程涉及的算法为lz77(由jacobziv和abrahamlempel于1977年提出,所以命名为lz77)算法。
lz77算法的压缩原理:如果文件中有两块字符串内容相同的话,那么只要知道前一块字符串内容的位置和大小,我们就可以确定后一块字符串的内容。所以我们可以用(两块字符串之间的距离,相同内容的长度)这样一对信息,来替换后一块字符串内容。由于(两块字符串之间的距离,相同内容的长度)这一对信息的大小,小于被替换内容的大小,所以文件得到了压缩。
为更好理解,下面我们来举一个例子:
有一个文件的内容如下:http://jiurl.yeah.nethttp://jiurl.nease.net,其中有些部分的内容,前面已经出现过了,后面用()括起来的部分就是相同的部分:http://jiurl.yeah.net(http://jiurl.)nease(.net)。
我们使用(两块字符串之间的距离,相同内容的长度)这样一对信息,来替换后一块字符串内容,得到http://jiurl.yeah.net(22,13)nease(23,4)。
(22,13)中,22表示后一块http://jiurl.与前一块http://jiurl.中任意两个相同字符之间的距离,如后一个h与前一个h的距离;13为相同内容的长度;(23,4)同理,此处不再赘述。
从上述例子中可看出,由于(两块字符串之间的距离,相同内容的长度)这一对信息的大小,小于被替换内容的大小,所以文件得到了压缩。
具体地,lz77算法使用滑动窗口寻找匹配串:
即lz77算法使用"滑动窗口"的方法,来寻找文件中的相同部分,文件中相同部分即匹配串。首先,对匹配串做一个说明,匹配串是指一个任意字节的序列,不仅仅是可以在文本文件中显示出来的那些字节的序列,还可以是包括标点符号的序列。这里的串强调的是它在文件中的位置,它的长度随着匹配的情况而变化。具体地:
lz77从文件的开始处开始,一个字节一个字节的向后进行处理。本发明实施例中,滑动窗口的长度是固定的,该滑动窗口的终止位置在当前处理字节之前,并且紧挨着当前处理字节,随着处理的字节不断的向后滑动,就象在阳光下,飞机的影子滑过大地一样。对于文件中的每个字节,用当前处理字节开始的串,和窗口中的每个串进行匹配,以寻找最长的匹配串。
窗口中的每个串指窗口中每个字节开始的串。如果当前处理字节开始的串在窗口中有匹配串,就用(之间的距离,匹配长度)这样一对信息,来替换当前串,然后从刚才处理完的串之后的下一个字节,继续处理。如果当前处理字节开始的串在窗口中没有匹配串,就不做改动的输出当前处理字节。
处理文件中第一个字节的时候,窗口在当前处理字节之前,也就是还没有滑到文件上,这时窗口中没有任何内容,被处理的字节就会不做改动的输出。随着处理的不断向后,窗口越来越多的滑入文件,最后整个窗口滑入文件,然后整个窗口在文件上向后滑动,直到整个文件结束。
需要说明的是,匹配串的长度有所限制,即本实施例中,设置了最小匹配串和最大匹配串,必须限制通过滑动窗口匹配出来的字符串大于该最小匹配串并且小于该最大匹配串,才会进行压缩,若是匹配出来的字符串小于该最小匹配串,或大于该最大匹配串,则不会进行后续的压缩操作。
为更好理解本实施例,举例如下:
假设文本字符串为:aaababaaac,当前有一个6个字符的滑动窗口,表示滑动窗口中一次性最多包含6个字符。
编码的第一步:滑动窗口是一个空窗口,此时滑动窗口还不需要滑动,将滑动窗口与滑动窗口外的文本字符串第一位字符进行比对,发现不存在匹配的字符,此时将滑动窗口往右移动一位,也就是将滑动窗口从右滑入文本字符串,那么字符串首字母进入该滑动窗口,此时滑动窗口显示字符a;
编码的第二步:由于滑动窗口内部只有字符a,滑动窗口外紧接着出现字符a,虽然滑动窗口里面和外面存在匹配的字符a,但是为了保证字符编码的效率,事先设置最小匹配串,如将最小匹配串设置为2个字符,由于此时只有一个字符a匹配,不符合要求,那么滑动窗口保持不动,将处理的字符往右移动一位,即与滑动窗口进行比对的字符就是aa,此时滑动窗口内只有一个字符a,因此,不存在匹配的字符,那么将该滑动窗口继续向右滑动,那么文本字符串的第二个字符也进入滑动窗口,此时滑动窗口中出现了两个一样的字符a。
编码的第三步:当滑动窗口内部存在两个相同的字符a时,将滑动窗口内部的两个字符a与窗口外的字符进行比对,由于滑动窗口外紧接着的两个字符是ab,不匹配,因此滑动窗口继续右滑,当滑动窗口滑动出现aaa时,滑动窗口外紧接着出现的字符是bab,与滑动窗口内的字符不匹配,那么滑动窗口继续向右滑动,以使得滑动窗口内部出现aaab,此时,由于滑动窗口内部的字符ab与滑动窗口外部紧接着的字符ab匹配,认为找到了相似长度为2的ab,因此滑动窗口外的ab满足最小匹配串的要求,因此一对〈长度,距离〉就被输出了,长度(length)是2并且向后距离也是2,所以输出为<2,2>。
编码的第四步:当后一个字符串ab用<2,2>输出之后,该段字符串就相当于删除了,此时将滑动窗口与剩下的文本字符串进行比对,剩下的文本字符串为aaac,通过该滑动窗口比对时,在将aaac中的前两个aa与滑动窗口进行比对时,虽然aa与滑动窗口出现相同内容和长度的字符,并且符合最小字符串,但是为了提高压缩效率,会继续判断文本字符串后面是否还有匹配的字符串,若此时检测到出还有一个字符a,即刚好有文本字符串aaa与滑动窗口内的三个字符a相同,那么确定剩下的文本字符串aaa与滑动窗口内aaa的距离以及相同字符串的长度,此时由于删除了原本字符串中的后一个ab,因此aaa与滑动窗口内aaa的距离是4,相同的内容长度是3,可输出<4,3>。
编码的第五步:输出<4,3>之后,该文本字符串中还需要处理的字符只有c,由于该滑动窗口中的字符是aaab,不匹配,因此滑动窗口向右滑动一位,将字符c也滑进该滑动窗口,那么滑动窗口内的字符就为aaabc。由于后续没有内容需要处理,那么将该滑动窗口内的所有字符都输出,最终得到的编码串为aaab<2,2><4,3>c。
使用lz77算法进行压缩和解压缩
为了在解压缩时,可以区分“没有匹配的字节”和“(之间的距离,匹配长度)对”,还需要在每个“没有匹配的字节”或者“(之间的距离,匹配长度)对”之前,放上一位,来指明是“没有匹配的字节”,还是“(之间的距离,匹配长度)对”。本发明实施例中,可选用0表示“没有匹配的字节”,用1表示“(之间的距离,匹配长度)对”。
实际应用中,固定(之间的距离,匹配长度)对中的,“之间的距离”和“匹配长度”所使用的位数。由于要固定“之间的距离”所使用的位数,所以才使用了固定大小的窗口,比如窗口的大小为32kb,那么用15位(2^15=32k)就可以保存0-32k范围内的任何一个值。此外,还将限定最大的匹配长度,这样一来,“匹配长度”所使用的位数也就固定了。
实际应用中,还将设定一个最小匹配长度,只有当两个串的匹配长度大于最小匹配长度时,才认为是一个匹配。为更好理解,举一个例子来说明这样做的原因:比如,“距离”使用15位,“长度”使用8位,那么“(之间的距离,匹配长度)对”将使用23位,也就是差1位3个字节。如果匹配长度小于3个字节的话,那么用“(之间的距离,匹配长度)对”进行替换的话,不但没有压缩,反而会增大,所以需要一个最小匹配长度。
压缩:
从文件的开始到文件结束,一个字节一个字节的向后进行处理。用当前处理字节开始的串,和滑动窗口中的每个串进行匹配,寻找最长的匹配串。如果当前处理字节开始的串在窗口中有匹配串,就先输出一个标志位,表明下面是一个(之间的距离,匹配长度)对,然后输出(之间的距离,匹配长度)对,然后从刚才处理完的串之后的下一个字节,继续处理。如果当前处理字节开始的串在窗口中没有匹配串,就先输出一个标志位,表明下面是一个没有改动的字节,然后不做改动的输出当前处理字节,然后继续处理当前处理字节的下一个字节。
解压缩:
从文件开始到文件结束,每次先读一位标志位,通过这个标志位来判断下面是一个(之间的距离,匹配长度)对,还是一个没有改动的字节。如果是一个(之间的距离,匹配长度)对,就读出固定位数的(之间的距离,匹配长度)对,然后根据对中的信息,将匹配串输出到当前位置。如果是一个没有改动的字节,就读出一个字节,然后输出这个字节。
综上所述,可以看出,lz77压缩时需要做大量的匹配工作,而解压缩时需要做的工作很少,也就是说解压缩相对于压缩将快的多,这对于需要进行一次压缩,多次解压缩的情况,是一个效果显著的优点。
当第一调制解调器11通过上述任一个压缩算法对数据包进行压缩之后,再将压缩后的数据包存储到buffer中进行转发。后续,第二调制解调器21即可从buffer中提取出压缩的数据包,并对提取的压缩数据包进行解压,其中,解压的方式也包括两种:当第一调制解调器11是加密压缩时,所述第二调制解调器21采用对应的密文进行解压,当第一调制解调器11是明文压缩时,所述第二调制解调器21即可直接进行解压,以得到解压后的数据包。由于本实施例中的各个压缩算法主要是明文算法,因此,解压的方式也是明文解压。
可以理解,本方案中,在移动终端100中的电信卡传输的数据包较大时,第二调制解调器21在request中添加标识,使第一调制解调器11对数据包进行压缩,以改变数据包的期望值,后续缓存到buffer的数据包就不会超出buffer的容量值,那么,避免了大数据包传输导致死机的问题,同时数据包不会被拆分成多个数据包,避免了数据包转发不完整的情况。
本发明进一步提供一种数据包传输方法。
参照图4,图4为本发明数据包传输方法第一实施例的流程示意图。
本实施例提出一种数据包识别方法,在本实施例中,提供了数据包传输方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明中,数据包传输方法应用于移动终端,所述移动终端包括基于预设接口连接的第一处理芯片001和第二处理芯片002、与所述第一处理芯片001连接的第一射频模块12、以及与所述第二处理芯片002连接的第二射频模块22,所述第一处理芯片001包括内嵌有虚拟用户识别卡10a的第一应用处理器10以及与第一用户识别卡13和第二用户识别卡14连接的第一调制解调器11,所述第二处理芯片002包括第二应用处理器20和第二调制解调器21,所述方法包括:
步骤s10,第一调制解调器通过预设接口接收第二调制解调器发送的数据包获取请求时,从内嵌有虚拟用户识别卡中提取所述数据包获取请求对应的数据包;
步骤s20,对提取的数据包进行压缩;
步骤s30,将压缩后的数据包缓存至所述预设接口的buffer中,以供第二调制解调器从所述buffer中提取压缩后的数据包,以完成数据包的传输。
在本实施例中,所述第一调制解调器11通过预设接口接收第二调制解调器21发送的数据包获取请求,后续也是通过所述预设接口将数据包反馈至所述第二调制解调器21。所述预设接口为uart接口。
其中,当第二处理芯片002的第二调制解调器21通过第二射频模块22接收到基站发送的数据包获取请求时,先通过uart将数据包获取请求传送给第一处理芯片001的第一调制解调器11;第一调制解调器11接收到该数据包获取请求后,根据数据包获取请求从虚拟用户识别卡10a中获取数据包;第一调制解调器11在获取到数据包之后,为了保证传输的数据不会大于uart的buffer,先对获取的数据包进行压缩,得到压缩后的数据包;再通过uart将压缩后的数据包传送至第二调制解调器21;第二调制解调器21接收到数据包后,再通过第二射频模块22将数据包上传至基站,以完成数据包的传输。
本实施例中,第一调制解调器11不限于从虚拟用户识别卡10a中获取数据包,当然,也可根据实际需要在第一用户识别卡13或第二用户识别卡14中获取数据包,第一调制解调器11在虚拟用户识别卡10a、第一用户识别卡13或第二用户识别卡14中获取数据包的方式一致,下文为了简述,仅以在虚拟用户识别卡10a中获取数据包为例,其它两种不再赘述。
具体地,所述步骤s10包括:
步骤a,所述第一调制解调器向虚拟用户识别卡中的片内操作系统发送数据包获取请求,由所述片内操作系统在虚拟用户识别卡中的文件存储模块中提取所述数据包获取请求对应的数据包,并反馈至所述第一调制解调器;
步骤b,所述第一调制解调器接收片内操作系统反馈的数据包。
在本实施例中,需要说明的是,虚拟用户识别卡10a中的数据包存储在文件存储模块中,当第一调制解调器11要获取虚拟用户识别卡10a中的数据包时,第一调制解调器11不会直接与虚拟用户识别卡10a中的文件存储模块交互,而是先向虚拟用户识别卡10a中的cos(chipoperatingsystem,片内操作系统)操作系统发送数据包获取请求即request,然后虚拟用户识别卡10a的cos操作系统基于该request在文件存储模块中获取数据包,然后将获取的数据包再传输给第一调制解调器11,第一调制解调器11只要接收cos操作系统反馈的数据包即可实现数据包的获取过程。
可以理解,由于第一调制解调器11无法在虚拟用户识别卡10a中的文件存储模块直接提取数据包,因此通过与虚拟用户识别卡10a的cos操作系统进行交互,以实现数据包的提取,保证后续的数据传输过程正常运行。
当第一调制解调器11从虚拟用户识别卡10a中提取出数据包获取请求对应的数据包之后,再对提取的数据包进行压缩,本实施例中,第一调制解调器11对数据包进行压缩时,可以采用加密压缩的方式进行数据包的压缩,也可以直接采用明文进行压缩。由于传输的sim卡网络鉴权数据量比较小,为了减少加密解密等操作而导致数据传输效率低,本发明实施例优选采用明文压缩的方式对数据包进行压缩,即本方案中采用的压缩算法以简单高效为主,具体采用的压缩算法和压缩过程在下文实施例中详述。
第一调制解调器11对数据包压缩之后,即可将压缩后的数据包缓存至所述预设接口uart的buffer中,以供第二调制解调器21从所述buffer中提取压缩后的数据包,以完成数据包的传输。
本实施例中需要说明的是,buffer存在于uart接口的两端,即uart接口的两端分别设置有buffer1和buffer2。当第二调制解调器21通过第二射频模块22接收到基站发送的数据获取请求时,将数据包获取请求通过uart接口发送给第一调制解调器11,第一调制解调器11从虚拟用户识别卡10a提取出数据包之后,先将提取的数据包存储到buffer1中中,以通过uart传输至第二调制解调器21的buffer2中,第二调制解调器21再从buffer2中获取数据包。
本实施例提出的数据包传输方法,第一调制解调器通过预设接口接收第二调制解调器发送的数据包获取请求时,先从虚拟用户识别卡中提取所述数据包获取请求对应的数据包,然后对提取的数据包进行压缩,再将压缩后的数据包缓存至所述预设接口的buffer中,以供第二调制解调器从所述buffer中提取压缩后的数据包,以完成数据包的传输。本方案在传输数据包时,先对待传输的数据包进行压缩,再将压缩后的数据包进行传输,使得传输的数据包的容量值有所减小,避免了数据传输过程中移动终端死机的情况。
进一步地,基于第一实施例提出本发明数据包传输方法第二实施例。
数据包传输方法第二实施例与数据包传输方法第一实施例的区别在于,所述步骤s20之前,所述方法还包括:
所述第一调制解调器判断能否从所述数据包获取请求中提取出第二调制解调器添加的压缩标识;
若能提取出压缩标识,则执行所述步骤s20。
在本实施例中,当第二调制解调器21向第一调制解调器11发送数据包获取请求(request)之前,为了防止传输的数据包过大,第二调制解调器21发送request时,先确定是否需要在request中添加压缩标识,若需要,则先在request中添加一个压缩标识,如添加字段01,以告知第一调制解调器11对待发送的数据包进行压缩。
需要说明的是,由于待传输的数据是根据通讯协议标准确定的,因此,第二调制解调器21可以得知即将获取的数据包的数据类型和数据大小,那么,当第二调制解调器21发送request之前,先判断当前待获取的数据包的大小,若待获取的数据包的大小超出了buffer的容量值,则第二调制解调器21在request中添加压缩标识,以告知第一调制解调器11对待传输的数据包进行压缩,若第二调制解调器21判断待获取的数据包的大小未超出buffer的容量值,则直接发送request即可,无需添加压缩标识。
在本实施例中,第二调制解调器21发送request之前,对待获取的数据包的大小进行识别,仅在待获取的数据包超出buffer的容量值时,才在request添加压缩标识,避免了所有的数据包获取请求都添加压缩标识,缩短了数据包传输的时间,提高了数据包传输的效率。
当第一调制解调器11通过预设接口(uart)接收第二调制解调器21发送的数据包获取请求时,先对所述数据包获取请求进行解析,以确定能否从所述数据包获取请求中提取出第二调制解调器21添加的压缩标识,若在所述数据包获取请求中提取出压缩标识,此时,所述第一调制解调器11即可对提取的数据包进行压缩,后续再将压缩后的数据包缓存至所述预设接口的buffer1中,并通过uart传输至buffer2中,以供第二调制解调器21从所述buffer2中提取压缩后的数据包,以完成数据包的传输。
在本实施例中,数据包传输过程是发生第一调制解调器11和第二调制解调器21唤醒之后,那么当第一调制解调器11和第二调制解调器21唤醒之后,若第二调制解调器21通过第二射频模块22接收到基站发生的数据包获取请求,执行以下操作:
判断:先确定待获取的数据包的大小,以判断是否需要添加压缩标识;
决策:若待获取的数据包超过uart的buffer的容量,则在发送数据包获取请求之前,在数据包获取请求添加压缩标识;
发送:在数据包获取请求添加压缩标识之后,发送数据包获取请求。
第一调制解调器11通过uart接收到数据包获取请求时,执行以下操作:
提取:确定能否从数据包获取请求中提取出压缩标识,若能,则提取出压缩标识;
压缩:基于提取的压缩标识,对从虚拟用户识别卡10a提取的数据包进行压缩;
反馈:反馈压缩的数据包。
最终,第二调制解调器21通过uart接收第一调制解调器11反馈的数据包,以完成数据包传输过程。上述的操作过程,可参照图3。
需要说明的是,第二调制解调器21发送的是数据包获取请求,由于数据包获取请求一般都小于buffer的容量,因此可不对数据包获取请求进行压缩。
在本实施例中,第一调制解调器11在对数据包进行压缩之前,先判断能否从所述数据包获取请求中提取出第二调制解调器21添加的压缩标识,若能提取出压缩标识,才对数据包进行压缩,防止数据包小于buffer的容量时也进行压缩,以防止系统资源的浪费,并且节省了数据包传输的时间,从而提高了数据包传输的效率。
进一步地,基于第一实施例提出本发明数据包传输方法第三实施例。
数据包传输方法第三实施例与数据包传输方法第一实施例的区别在于,所述步骤s20之前,所述方法还包括:
所述第一调制解调器对提取的所述数据包进行解析,以得到所述数据包的包头;
基于所述数据包的包头确定所述数据包的长度;
在所述数据包的长度大于预设阈值时,执行所述步骤s20。
在本实施例中,所述第一调制解调器11对数据包进行压缩之前,先对从第一用户识别卡13或第二用户识别卡14中提取的数据包进行解析,以得到所述数据包的包头,然后从包头中获取数据包的长度,以确定该数据包的大小。其中,数据包为tlv格式,tlv格式是ber(basicencodingrules,基本编码规则)编码的一种,全称为type(类型),length(长度),value(值),t字段表示数据包的类型,l字段表示数据包的长度、v字段用于存放数据包的内容。
本实施例中,该数据包的生成过程为:传输层获取到数据包对应的原始数据,并为原始数据添加传输层的数据包头,数据包头包括传输层数据类型和数据长度,得到初始数据包,并将初始数据包传输至传输复用层。当传输复用层接收到初始数据包后,为初始化数据包添加传输复用层的数据包头,数据包头包括复用层的数据类型和数据长度,得到数据包,并调用物理驱动层的发送接口将该数据包发送给物理层。后续,第一调制解调器11对提取的所述数据包进行解析,就是从物理层(物理传输介质)之上的物理驱动层检测数据包的包头,以解析得到数据包的大小(长度)。
当第一调制解调器11确定数据包的长度后,再判断该数据包的长度是否大于预设阈值(即buffer的容量值)。在本实施例中,所述预设阈值可选为512字节,在其它实施例中,也可以将所述预设阈值设置为其它长度,在此不再限定。当数据包的长度大于所述预设阈值时,为了防止数据包传输导致终端死机,所述第一调制解调器11对提取的数据包进行压缩。可以理解,若提取的数据包的长度小于预设阈值,所述第一调制解调器11可直接通过uart接口发送该数据包至第二调制解调器21。
在本实施例中,在对数据包进行压缩之前,所述第一调制解调器对提取的所述数据包进行解析,以得到所述数据包的包头,再确定所述数据包的长度,仅在数据包的长度大于预设阈值时,才对提取的数据包进行压缩,从而提高了数据包压缩的准确性。
进一步地,基于第一至第三实施例提出本发明数据包传输方法第四实施例。
数据包传输方法第四实施例与数据包传输方法第一至第三实施例的区别在于,所述步骤s20包括:
步骤a、所述第一调制解调器获取所述数据包对应的源文本;
步骤b、确定源文本中出现频率大于预设频率的字符段;
步骤c、在预设字典列表中,查找所述字符段对应的编码,其中,编码的长度小于对应的字符段的长度;
步骤d、通过查找的编码代替对应的字符段,以实现数据包的压缩。
在本实施例中,所述第一调制解调器11对数据包进行压缩,具体地,先获取数据包对应的源文本,然后确定源文本中出现频率大于预设频率的字符段,再从预设字典列表中,查找所述字符段对应的编码,其中,编码的长度小于对应的字符段的长度,最终通过查找的编码代替对应的字符段,以实现数据包的压缩。
该过程涉及的算法为字典算法,字典算法是最为简单的压缩算法之一。该字典算法把文本中出现频率大于预设一定值的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇,例如,当前的字典列表中:
00=chinese
01=people
02=china
若当期数据包中的源文本为:iamachinesepeople,iamfromchina。那么,采用该字典算法,压缩后的编码为:iama0001,iamfrom02。
可以理解,压缩编码后的长度显著缩小,这样的编码专有名词或者固定组合较多的内容中,压缩效率十分显著,将预定的文本内容用字典中预定的编码映射替代,解压缩的时候执行反向还原即可。
进一步地,所述步骤a之后,所述步骤s20还包括:
步骤e、依次确定源文本中高四位为零且相邻的任两个字符段;
步骤f、将所述任两个字符段的高四位进行删除,并将所述任两个字符段的低四位进行组合,以实现数据包的压缩。
即,所述第一调制解调器11获取到数据包对应的源文本之后,还可依次确定源文本中高四位为零且相邻的任两个字符段,再将任两个字符段的高四位进行删除,并将任两个字符段的低四位进行组合,以实现数据包的压缩。
该过程涉及的算法为固定位长算法(fixedbitlengthpacking),这种算法是把文本用需要的最少的位来进行压缩编码。比如:八个十六进制数:1,2,3,4,5,6,7,8。转换为二进制为:00000001,00000010,00000011,00000100,00000101,00000110,00000111,00001000。每个数只用到了低4位,而高4位没有用到(全为0),因此对低4位进行压缩编码后得到:0001,0010,0011,0100,0101,0110,0111,1000。然后两两补充为8位字节得到:00010010,00110100,01010110,01111000。所以原来的八个十六进制数缩短了一半,得到4个十六进制数:12,34,56,78。
可以理解,通过这种组合方式,将需要用到的位数进行了缩小,使得数据包的容量有所减小,同理,解压时执行反响拆分添加组合即可。
进一步地,所述步骤a之后,所述步骤s20还包括:
步骤g、对源文本中连续出现的字符,采用重复次数加字符进行代替,以实现数据包的压缩。
即,所述第一调制解调器11获取到数据包对应的源文本之后,还可对源文本中连续出现的字符,采用重复次数加字符进行代替,以实现数据包的压缩。
该过程涉及的算法为rle(runlengthencoding,游程编码,又译行程长度编码)算法,这种压缩编码是一种变长的编码,rle根据文本不同的具体情况会有不同的压缩编码变体与之相适应,以产生更大的压缩比率。具体地:
变体1:重复次数+字符
文本字符串:aaabbbccccdddd,编码后得到:3a3b4c4d;通过该变体算法,即可将数据包终端文本字符串进行压缩。
变体2:特殊字符+重复次数+字符
文本字符串:aaaaabccccbccc,编码后得到:bb5abb4cbb3c;其中,该编码串的最开始说明特殊字符为b,然后再添加一个b,b后面跟着的数字就表示出重复的次数。也就是说,文本串字符采用该变体2算法进行编码压缩时,先在编码后的编码串的首字母说明特殊字符为b,然后由于后面紧接着出现5个字符a,需要在这5个字符a之前添加一个特殊字符即字符b,因此就是bb5a,在5a之后出现b,且b之后又出现3个c,因此,需要在3个c之前再添加一个特殊字符b,与前面连接起来就是bb5abb4c,后面采用同样的方式,即可得到最终的编码串bb5abb4cbb3c。
为了更清楚理解该方案,举另一个例子:文本字符串仍然为:aaaaabccccbccc,若当前编码串的最开始说明特殊字符为d,那么,编码后得到:dd5abd4cbd3c。
变体3:
把文本每个字节分组成块,每个字符最多重复127次。每个块以一个特殊字节开头。那个特殊字节的第7位如果被置位,那么剩下的7位数值就是后面的字符的重复次数。如果第7位没有被置位,那么剩下7位就是后面没有被压缩的字符的数量。
例如:文本字符串:aaaaabcdefff,编码后得到:85a4bcde83f(85h=10000101b、4h=00000100b、83h=10000011b)。其中,先将文本字符串分组成三个块,分别是aaaaa、bcde和fff,三个快对应的特殊字符分别是10000101、00000100和10000011,由于10000101中第7位被置位为1,因此剩下的7位数值为后面的字符的重复次数,此时可知剩下的7位数值对应的值为5,即可得到85a;同理,由于00000100中的第7位没有被置位为1,那么剩下7位是后面没有被压缩的字符的数量,可知此时剩下7位对应的值为4,即可得到4bcde;同理可确定83f,此处不在赘述。
需要说明的是,以上所列举出的三种3种rle变体算法仅仅是较佳的几种变体算法,本领域技术人员利用本发明的技术思想,根据其具体需求所提出的其它rle变体算法均在本发明的保护范围内,在此不进行一一穷举。
进一步地,所述步骤a之后,所述步骤s20还包括:
步骤h、确定源文本中是否存在内容相同且长度大于预设值的字符段;
步骤i、若存在,确定后一个字符段与前一个字符端的距离以及所述字符段的长度;
步骤j、采用距离与长度的标识代替后一个字符段,以实现数据包的压缩。
即,所述第一调制解调器11获取到数据包对应的源文本之后,还可确定源文本中是否存在内容相同且长度大于预设值的字符段,若存在,确定后一个字符段与前一个字符端的距离以及字符段的长度,采用距离与长度的标识代替后一个字符段,以实现数据包的压缩。
该过程涉及的算法为lz77(由jacobziv和abrahamlempel于1977年提出,所以命名为lz77)算法。
lz77算法的压缩原理:如果文件中有两块字符串内容相同的话,那么只要知道前一块字符串内容的位置和大小,我们就可以确定后一块字符串的内容。所以我们可以用(两块字符串之间的距离,相同内容的长度)这样一对信息,来替换后一块字符串内容。由于(两块字符串之间的距离,相同内容的长度)这一对信息的大小,小于被替换内容的大小,所以文件得到了压缩。
为更好理解,下面我们来举一个例子:
有一个文件的内容如下:http://jiurl.yeah.nethttp://jiurl.nease.net,其中有些部分的内容,前面已经出现过了,后面用()括起来的部分就是相同的部分:http://jiurl.yeah.net(http://jiurl.)nease(.net)。
我们使用(两块字符串之间的距离,相同内容的长度)这样一对信息,来替换后一块字符串内容,得到http://jiurl.yeah.net(22,13)nease(23,4)。
(22,13)中,22表示后一块http://jiurl.与前一块http://jiurl.中任意两个相同字符之间的距离,如后一个h与前一个h的距离;13为相同内容的长度;(23,4)同理,此处不再赘述。
从上述例子中可看出,由于(两块字符串之间的距离,相同内容的长度)这一对信息的大小,小于被替换内容的大小,所以文件得到了压缩。
具体地,lz77算法使用滑动窗口寻找匹配串:
即lz77算法使用"滑动窗口"的方法,来寻找文件中的相同部分,文件中相同部分即匹配串。首先,对匹配串做一个说明,匹配串是指一个任意字节的序列,不仅仅是可以在文本文件中显示出来的那些字节的序列,还可以是包括标点符号的序列。这里的串强调的是它在文件中的位置,它的长度随着匹配的情况而变化。具体地:
lz77从文件的开始处开始,一个字节一个字节的向后进行处理。本发明实施例中,滑动窗口的长度是固定的,该滑动窗口的终止位置在当前处理字节之前,并且紧挨着当前处理字节,随着处理的字节不断的向后滑动,就象在阳光下,飞机的影子滑过大地一样。对于文件中的每个字节,用当前处理字节开始的串,和窗口中的每个串进行匹配,以寻找最长的匹配串。
窗口中的每个串指窗口中每个字节开始的串。如果当前处理字节开始的串在窗口中有匹配串,就用(之间的距离,匹配长度)这样一对信息,来替换当前串,然后从刚才处理完的串之后的下一个字节,继续处理。如果当前处理字节开始的串在窗口中没有匹配串,就不做改动的输出当前处理字节。
处理文件中第一个字节的时候,窗口在当前处理字节之前,也就是还没有滑到文件上,这时窗口中没有任何内容,被处理的字节就会不做改动的输出。随着处理的不断向后,窗口越来越多的滑入文件,最后整个窗口滑入文件,然后整个窗口在文件上向后滑动,直到整个文件结束。
需要说明的是,匹配串的长度有所限制,即本实施例中,设置了最小匹配串和最大匹配串,必须限制通过滑动窗口匹配出来的字符串大于该最小匹配串并且小于该最大匹配串,才会进行压缩,若是匹配出来的字符串小于该最小匹配串,或大于该最大匹配串,则不会进行后续的压缩操作。
为更好理解本实施例,举例如下:
假设文本字符串为:aaababaaac,当前有一个6个字符的滑动窗口,表示滑动窗口中一次性最多包含6个字符。
编码的第一步:滑动窗口是一个空窗口,此时滑动窗口还不需要滑动,将滑动窗口与滑动窗口外的文本字符串第一位字符进行比对,发现不存在匹配的字符,此时将滑动窗口往右移动一位,也就是将滑动窗口从右滑入文本字符串,那么字符串首字母进入该滑动窗口,此时滑动窗口显示字符a;
编码的第二步:由于滑动窗口内部只有字符a,滑动窗口外紧接着出现字符a,虽然滑动窗口里面和外面存在匹配的字符a,但是为了保证字符编码的效率,事先设置最小匹配串,如将最小匹配串设置为2个字符,由于此时只有一个字符a匹配,不符合要求,那么滑动窗口保持不动,将处理的字符往右移动一位,即与滑动窗口进行比对的字符就是aa,此时滑动窗口内只有一个字符a,因此,不存在匹配的字符,那么将该滑动窗口继续向右滑动,那么文本字符串的第二个字符也进入滑动窗口,此时滑动窗口中出现了两个一样的字符a。
编码的第三步:当滑动窗口内部存在两个相同的字符a时,将滑动窗口内部的两个字符a与窗口外的字符进行比对,由于滑动窗口外紧接着的两个字符是ab,不匹配,因此滑动窗口继续右滑,当滑动窗口滑动出现aaa时,滑动窗口外紧接着出现的字符是bab,与滑动窗口内的字符不匹配,那么滑动窗口继续向右滑动,以使得滑动窗口内部出现aaab,此时,由于滑动窗口内部的字符ab与滑动窗口外部紧接着的字符ab匹配,认为找到了相似长度为2的ab,因此滑动窗口外的ab满足最小匹配串的要求,因此一对〈长度,距离〉就被输出了,长度(length)是2并且向后距离也是2,所以输出为<2,2>。
编码的第四步:当后一个字符串ab用<2,2>输出之后,该段字符串就相当于删除了,此时将滑动窗口与剩下的文本字符串进行比对,剩下的文本字符串为aaac,通过该滑动窗口比对时,在将aaac中的前两个aa与滑动窗口进行比对时,虽然aa与滑动窗口出现相同内容和长度的字符,并且符合最小字符串,但是为了提高压缩效率,会继续判断文本字符串后面是否还有匹配的字符串,若此时检测到出还有一个字符a,即刚好有文本字符串aaa与滑动窗口内的三个字符a相同,那么确定剩下的文本字符串aaa与滑动窗口内aaa的距离以及相同字符串的长度,此时由于删除了原本字符串中的后一个ab,因此aaa与滑动窗口内aaa的距离是4,相同的内容长度是3,可输出<4,3>。
编码的第五步:输出<4,3>之后,该文本字符串中还需要处理的字符只有c,由于该滑动窗口中的字符是aaab,不匹配,因此滑动窗口向右滑动一位,将字符c也滑进该滑动窗口,那么滑动窗口内的字符就为aaabc。由于后续没有内容需要处理,那么将该滑动窗口内的所有字符都输出,最终得到的编码串为aaab<2,2><4,3>c。
使用lz77算法进行压缩和解压缩
为了在解压缩时,可以区分“没有匹配的字节”和“(之间的距离,匹配长度)对”,还需要在每个“没有匹配的字节”或者“(之间的距离,匹配长度)对”之前,放上一位,来指明是“没有匹配的字节”,还是“(之间的距离,匹配长度)对”。本发明实施例中,可选用0表示“没有匹配的字节”,用1表示“(之间的距离,匹配长度)对”。
实际应用中,固定(之间的距离,匹配长度)对中的,“之间的距离”和“匹配长度”所使用的位数。由于要固定“之间的距离”所使用的位数,所以才使用了固定大小的窗口,比如窗口的大小为32kb,那么用15位(2^15=32k)就可以保存0-32k范围内的任何一个值。此外,还将限定最大的匹配长度,这样一来,“匹配长度”所使用的位数也就固定了。
实际应用中,还将设定一个最小匹配长度,只有当两个串的匹配长度大于最小匹配长度时,才认为是一个匹配。为更好理解,举一个例子来说明这样做的原因:比如,“距离”使用15位,“长度”使用8位,那么“(之间的距离,匹配长度)对”将使用23位,也就是差1位3个字节。如果匹配长度小于3个字节的话,那么用“(之间的距离,匹配长度)对”进行替换的话,不但没有压缩,反而会增大,所以需要一个最小匹配长度。
压缩:
从文件的开始到文件结束,一个字节一个字节的向后进行处理。用当前处理字节开始的串,和滑动窗口中的每个串进行匹配,寻找最长的匹配串。如果当前处理字节开始的串在窗口中有匹配串,就先输出一个标志位,表明下面是一个(之间的距离,匹配长度)对,然后输出(之间的距离,匹配长度)对,然后从刚才处理完的串之后的下一个字节,继续处理。如果当前处理字节开始的串在窗口中没有匹配串,就先输出一个标志位,表明下面是一个没有改动的字节,然后不做改动的输出当前处理字节,然后继续处理当前处理字节的下一个字节。
解压缩:
从文件开始到文件结束,每次先读一位标志位,通过这个标志位来判断下面是一个(之间的距离,匹配长度)对,还是一个没有改动的字节。如果是一个(之间的距离,匹配长度)对,就读出固定位数的(之间的距离,匹配长度)对,然后根据对中的信息,将匹配串输出到当前位置。如果是一个没有改动的字节,就读出一个字节,然后输出这个字节。
综上所述,可以看出,lz77压缩时需要做大量的匹配工作,而解压缩时需要做的工作很少,也就是说解压缩相对于压缩将快的多,这对于需要进行一次压缩,多次解压缩的情况,是一个效果显著的优点。
当第一调制解调器11通过上述任一个压缩算法对数据包进行压缩之后,再将压缩后的数据包存储到buffer中进行转发。后续,第二调制解调器21即可从buffer中提取出压缩的数据包,并对提取的压缩数据包进行解压,其中,解压的方式也包括两种:当第一调制解调器11是加密压缩时,所述第二调制解调器21采用对应的密文进行解压,当第一调制解调器11是明文压缩时,所述第二调制解调器21即可直接进行解压,以得到解压后的数据包。由于本实施例中的各个压缩算法主要是明文算法,因此,解压的方式也是明文解压。
可以理解,本方案中,在移动终端100中的电信卡传输的数据包较大时,第二调制解调器21在request中添加标识,使第一调制解调器11对数据包进行压缩,以改变数据包的期望值,后续缓存到buffer的数据包就不会超出buffer的容量值,那么,避免了大数据包传输导致死机的问题,同时数据包不会被拆分成多个数据包,避免了数据包转发不完整的情况。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。