一种读取数据的方法和装置与流程

文档序号:13421352阅读:180来源:国知局
一种读取数据的方法和装置与流程

本发明涉及电子技术领域,特别涉及一种读取数据的方法和装置。



背景技术:

随着电子技术的发展,手机、计算机等设备得到了广泛的应用,相应的设备功能越来越丰富。在设备的使用过程中,往往需要与其他设备(比如服务器)传输数据。

设备之间传输的数据一般是由多位二进制数组成的码流,设备接收到码流后,可以根据需要,读取接收到的码流中的某几位的数据。目前,设备往往采用生成掩码的方式,读取码流中的某几位数据。

在实现本发明的过程中,发明人发现现有技术至少存在以下问题:

基于上述处理方式,往往生成掩码需要的时间比较多,从而,导致读取数据的速度较慢。



技术实现要素:

为了解决相关技术中读取数据的速度较慢的问题,本发明实施例提供了一种读取数据的方法和装置。所述技术方案如下:

第一方面,提供了一种读取数据的方法,所述方法包括:

确定码流中当前可读的最大位数total_real_n;

当所述total_real_n等于0时,终止读取,得到最终要读取的所述码流中的数据;

当所述total_real_n大于0时,确定此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n,并确定所述此次待读取数据的位数real_n;

读取所述此次待读取数据所在字节的数据;

对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;

对之前读取到的数据r左移real_n位,将左移real_n位的r与所述v进行或运算,得到截止到当前已读取到的数据。

可选的,所述确定码流中当前可读的最大位数total_real_n,包括:

获取所述码流的总位数t、最终要读取的所述码流中的数据的位数n、截至到当前已读取到的数据的位数x以及此次待读取数据在所述码流中的位置p;

将所述t减去p差值与所述n减去x的差值的最小值,确定为码流中当前可读的最大位数total_real_n。

可选的,所述当所述total_real_n大于0时,确定此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n,包括:

当所述total_real_n大于0时,将所述p除以字节包含的位数的余数,确定为此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n。

可选的,所述方法还包括:

获取最终要读取的所述码流中的数据在所述码流中的目标位置;

将所述目标位置与所述x的和,确定为此次待读取数据在所述码流中的位置p。

可选的,所述确定所述此次待读取数据的位数real_n,包括:

将字节包含的位数减去所述consume_n的差值与所述total_real_n的最小值,确定为所述此次待读取数据的位数real_n。

第二方面,提供了一种读取数据的装置,所述装置包括:

第一确定模块,用于确定码流中当前可读的最大位数total_real_n;

终止模块,用于当所述total_real_n等于0时,终止读取,得到最终要读取的所述码流中的数据;

第二确定模块,用于当所述total_real_n大于0时,确定此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n,并确定所述此次待读取数据的位数real_n;

读取模块,用于读取所述此次待读取数据所在字节的数据;

移位模块,用于对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;

合并模块,用于对之前读取到的数据r左移real_n位,将左移real_n位的r与所述v进行或运算,得到截止到当前已读取到的数据。

可选的,所述第一确定模块,用于:

获取所述码流的总位数t、最终要读取的所述码流中的数据的位数n、截至到当前已读取到的数据的位数x以及此次待读取数据在所述码流中的位置p;

将所述t减去p差值与所述n减去x的差值的最小值,确定为码流中当前可读的最大位数total_real_n。

可选的,所述第二确定模块,用于:

当所述total_real_n大于0时,将所述p除以字节包含的位数的余数,确定为此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n。

可选的,所述第一确定模块,还用于:

获取最终要读取的所述码流中的数据在所述码流中的目标位置;

将所述目标位置与所述x的和,确定为此次待读取数据在所述码流中的位置p。

可选的,所述第二确定模块,用于:

将字节包含的位数减去所述consume_n的差值与所述total_real_n的最小值,确定为所述此次待读取数据的位数real_n。

本发明实施例提供的技术方案带来的有益效果是:

本发明实施例中,确定码流中当前可读的最大位数total_real_n;当total_real_n等于0时,终止读取,得到最终要读取的码流中的数据;当total_real_n大于0时,确定此次待读取数据所在字节中此次待读取数据之前的位数consume_n,并确定此次待读取数据的位数real_n;读取此次待读取数据所在字节的数据;对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;对之前读取到的数据r左移real_n位,将左移real_n位的r与v进行或运算,得到截止到当前已读取到的数据。这样,设备可以通过左移、右移和或运算即可读取到最终要读取的码流中的数据,无需生成掩码,往往左移、右移和或运算需要的时间比较少,从而,可以提高读取数据的速度。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种读取数据的方法流程图;

图2是本发明实施例提供的一种读取数据示意图;

图3是本发明实施例提供的一种读取数据的装置结构示意图;

图4是本发明实施例提供的一种设备结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

本发明实施例提供了一种读取数据的方法,该方法的执行主体为设备。其中,该设备可以是终端(比如手机、计算机等终端)或服务器。设备可以包括处理器、存储器等部件。处理器可以为cpu(centralprocessingunit,中央处理单元)等,可以用于读取数据的相关处理。存储器可以为ram(randomaccessmemory,随机存取存储器)、flash(闪存)等,可以用于存储接收到的数据、处理过程所需的数据、处理过程中生成的数据等。设备还可以包括收发器。收发器可以用于与其它设备进行数据传输,可以包括天线、匹配电路、调制解调器等。

下面将结合具体实施方式,对图1所示的处理流程进行详细的说明,内容可以如下:

步骤101,确定码流中当前可读的最大位数total_real_n。

在实施中,在设备的使用过程中,往往会与其他设备进行数据传输,即可以接收到其他设备发送的码流。设备接收到码流后,可以根据需要读取码流中的某几位数据(其中,可以用n表示设备最终要读取的码流中的数据的位数)。在开始读取数据前,设备首先可以确定接收到的码流中的当前可读的最大位数(其中,当前可读的最大位数可以用total_real_n)。

可选的,total_real_n可以是由码流的总位数、n、截至到当前已读取到的数据的位数以及此次待读取数据在码流中的位置决定的,相应的,步骤101的处理过程可以如下:获取码流的总位数t、最终要读取的码流中的数据的位数n、截至到当前已读取到的数据的位数x以及此次待读取数据在码流中的位置p;将t减去p差值与n减去x的差值的最小值,确定为码流中当前可读的最大位数total_real_n。

其中,此次待读取数据在码流中的位置p可以是此次待读取数据在码流中的前一位数据的位数。最终要读取的码流中的数据的位数n可以是设备待从接收到的码流中读取的全部数据的总位数。

在实施中,设备在读取数据时,是按照字节读取,即设备每次读取的最小单位是字节(其中,一个字节包含的位数为8)。针对此种情况,当设备最终要读取的码流中的数据跨越多个字节时,设备可以分多次读取,直至得到最终要读取的码流中的数据。其中,每读一次数据,设备可以更新一次total_real_n和此次待读取数据在码流中的位置p。

具体的,设备接收到码流后,可以确定码流的总位数(其中,总位数可以用t表示)、最终要读取的码流中的数据的位数n、以及最终要读取的码流中的数据在码流中的前一位数据的位数(可以用p表示,此时,p即为此次(第一次)待读取数据在码流中的位置)。确定出上述t、n、p后,可以确定第一次读取时,码流中当前可读的最大位数total_real_n。具体的,可以将t-p的差值与n的最小值,确定为total_real_n,即当码流中p之后的位数小于n时,total_real_n即为码流中p之后的位数(即为t-p的差值),当码流中p之后的位数大于n时,total_real_n即为n。例如,假设码流的第一个数字的位置称为第一位,接收到的码流为0101101110,要读取第四位之后的3位数据(即最终要读取码流中的数据为101),则设备可以确定出t=10、p=4、n=3,t-p的差值为6,进而,设备可以将t-p的差值与n的最小值3,确定为total_real_n。

第一次读取数据后,当需要进行第二次读取数据时,设备可以重新确定码流中当前(即第二次读取数据时)可读的最大位数total_real_n,即可以对total_real_n进行更新,以便得到码流中当前(即第二次读取数据时)可读的最大位数total_real_n。此时,total_real_n可以是第一次读取数据时码流中当前可读的最大位数total_real_n减去第一次读取到的数据的位数的差值。也就是说,每次读取数据时,设备可以获取码流的总位数t、最终要读取的码流中的数据的位数n、截至到当前已读取到的数据的位数x以及此次待读取数据在码流中的位置p,进而,可以将t减去p差值与n减去x的差值的最小值,确定为码流中当前可读的最大位数total_real_n。

可选的,每当读一次数据时,设备还可以对p进行更新,相应的,设备还可以进行如下处理:获取最终要读取的码流中的数据在码流中的目标位置;将目标位置与x的和,确定为此次待读取数据在码流中的位置p。

在实施中,每次读取数据后,当进行下一次(即此次)读取数据时,设备可以对此次的上一次读取到的数据在码流中的位置进行更新,得到此次待读取数据在码流中的位置,其中,每次待读取数据在码流中的位置可以用p表示。具体的,设备可以获取最终要读取的码流中的数据在码流中的目标位置,即可以获取最终要读取的码流中的数据在码流中的前一位数据的位数(即位置),并可以获取截至到当前已读取到的数据的位数x,进而,可以将目标位置与x的和,确定为此次待读取数据在码流中的位置p。或者,设备可以获取上次读取到的数据在码流中的位置、以及上次读取到的数据的位数,进而,可以将上次读取到的数据在码流中的位置与上次读取到的数据的位数的和,确定为此次待读取数据在码流中的位置p。也就是说,接收到码流后,可以确定最终要读取的码流中的数据在码流中的目标位置,然后,每次读取数据前,均可根据上次读取到的数据的位数和上次读取到的数据在码流中的位置,得到此次待读取数据在码流中的位置。

步骤102,当total_real_n等于0时,终止读取,得到最终要读取的码流中的数据。

在实施中,确定出码流中当前可读的最大位数total_real_n后,可以判断total_real_n是否等于0,当total_real_n等于0时,设备可以终止读取,得到最终要读取的码流中的数据。

步骤103,当total_real_n大于0时,确定此次待读取数据所在字节中此次待读取数据之前的位数consume_n,并确定此次待读取数据的位数real_n。

在实施中,当total_real_n大于0时,说明设备还没有完全读取到最终要读取的码流中的数据,可以继续读取数据。具体的,设备可以确定此次待读取数据所在的字节,进而,可以确定该字节中此次待读取数据之前的位数consume_n。确定出consume_n后,设备可以进一步确定此次待读取数据的位数real_n。

可选的,设备可以由此次待读取数据在码流中的位置p确定consume_n,相应的,步骤103的处理处理过程可以如下:当total_real_n大于0时,将p除以字节包含的位数的余数,确定为此次待读取数据所在字节中此次待读取数据之前的位数consume_n。

在实施中,当total_real_n大于0时,设备可以获取确定出的p,将p除以字节包含的位数(比如,8),得到余数,进而,可以将得到的余数,确定为此次待读取数据所在字节中此次待读取数据之前的位数consume_n。例如,p=5(此种情况,说明此次读取的数据即为p=5所在字节中的位数为5之后的数据),字节包含的位数为8,则设备可以将5除以8的余数5,确定为此次待读取数据所在字节中此次待读取数据之前的位数consume_n。

可选的,设备可以由consume_n和total_real_n确定上述real_n,相应的,处理过程可以如下:将字节包含的位数减去consume_n的差值与total_real_n的最小值,确定为此次待读取数据的位数real_n。

在实施中,由于设备每次读取数据的最小单位是字节,因此,此次待读取数据的位数(可以用real_n表示)可以由字节包含的位数和consume_n决定。具体的,设备确定出consume_n后,可以计算字节包含的位数减去consume_n的差值(其中,该差值可以是p所在的字节中包含的p之后的位数),进而,可以将得到的差值与total_real_n的最小值,确定为此次待读取数据的位数real_n。例如,p=5,total_real_n=10,则可以计算出real_n=3。又例如,p=5,total_real_n=1,则可以计算出real_n=1。

步骤104,读取此次待读取数据所在字节的数据。

在实施中,由于设备每次读取数据的最小单位是字节,因此,设备可以读取此次待读取数据所在字节的数据。具体的,设备可以通过p确定此次待读取数据所在字节,即设备可以从p除以8(即一个字节包含的位数)的商的整数部分开始,在码流中,按照顺序读取8位数据。

例如,码流为101011001011101010,p=10,total_real_n=1,则设备可以计算出p除以8的商的整数部分为1,余数为2,即consume_n为2,real_n为1,此时,设备可以确定此次待读取数据所在字节的数据为码流中第二个字节的数据,即10111010。

步骤105,对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v。

在实施中,读取到此次待读取数据所在字节的数据后,可以将其左移consume_n位,然后,可以对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v。例如,码流为101011001011101010,p=10,total_real_n=1,则读取此次待读取数据所在字节的数据为10111010,consume_n=2,real_n=1,将10111010左移2位后,得到11101000,再将11101000右移7位后,得到此次读取到的数据v为00000001。

步骤106,对之前读取到的数据r左移real_n位,将左移real_n位的r与v进行或运算,得到截止到当前已读取到的数据。

在实施中,得到此次读取到的数据v后,设备可以获取此次之前读取到的数据r,将r左移real_n位,进而,可以将左移real_n位的r与v进行或运算,得到从第一次读取数据开始截止到当前已读取到的数据。也就是说,对于分多次读取得到最终要读取的码流中的数据的情况,设备每次读取数据后,均可以将此次读取到的数据与之前读取到的数据进行合并。例如,码流为101011011011101010,最终要读取的码流中的数据为101101(即第一个字节的后三位,第二个字节的前三位),第一次读取到的第一个字节的数据为10101101,将10101101左移5位,得到10100000,再将其右移5位(8-3),得到00000101(即第一次读取到的数据),第二次读取到的第二个字节的数据为10111010,设备可以将10111010左移0位,得到10111010,再将其右移5位,得到00000101(即第二次读取到的数据),此时,之前读取到的数据r即为第一次读取到的数据00000101,设备可以将其左移3位,得到00101000,再将00101000与第二次读取到的数据00000101进行或运算,得到00101101,此时,即得到了最终要读取的码流中的数据101101,如图2所示。

本方案中,如果需要分多次读取数据,才能得到最终要读取的码流中的数据的话,则设备可以循环执行上述步骤的处理,即每次读取数据时,均可按照上述步骤进行处理,读取结束的条件可以是total_real_n为0,每次读取数据后,均可对total_real_n和p进行更新。

本发明实施例中,确定码流中当前可读的最大位数total_real_n;当total_real_n等于0时,终止读取,得到最终要读取的码流中的数据;当total_real_n大于0时,确定此次待读取数据所在字节中此次待读取数据之前的位数consume_n,并确定此次待读取数据的位数real_n;读取此次待读取数据所在字节的数据;对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;对之前读取到的数据r左移real_n位,将左移real_n位的r与v进行或运算,得到截止到当前已读取到的数据。这样,设备可以通过左移、右移和或运算即可读取到最终要读取的码流中的数据,无需生成掩码,往往左移、右移和或运算需要的时间比较少,从而,可以提高读取数据的速度。

基于相同的技术构思,本发明实施例还提供了一种读取数据的装置,如图3所示,该装置包括:

第一确定模块310,用于确定码流中当前可读的最大位数total_real_n;

终止模块320,用于当所述total_real_n等于0时,终止读取,得到最终要读取的所述码流中的数据;

第二确定模块330,用于当所述total_real_n大于0时,确定此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n,并确定所述此次待读取数据的位数real_n;

读取模块340,用于读取所述此次待读取数据所在字节的数据;

移位模块350,用于对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;

合并模块360,用于对之前读取到的数据r左移real_n位,将左移real_n位的r与所述v进行或运算,得到截止到当前已读取到的数据。

可选的,所述第一确定模块310,用于:

获取所述码流的总位数t、最终要读取的所述码流中的数据的位数n、截至到当前已读取到的数据的位数x以及此次待读取数据在所述码流中的位置p;

将所述t减去p差值与所述n减去x的差值的最小值,确定为码流中当前可读的最大位数total_real_n。

可选的,所述第二确定模块330,用于:

当所述total_real_n大于0时,将所述p除以字节包含的位数的余数,确定为此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n。

可选的,所述第一确定模块310,还用于:

获取最终要读取的所述码流中的数据在所述码流中的目标位置;

将所述目标位置与所述x的和,确定为此次待读取数据在所述码流中的位置p。

可选的,所述第二确定模块330,用于:

将字节包含的位数减去所述consume_n的差值与所述total_real_n的最小值,确定为所述此次待读取数据的位数real_n。

本发明实施例中,确定码流中当前可读的最大位数total_real_n;当total_real_n等于0时,终止读取,得到最终要读取的码流中的数据;当total_real_n大于0时,确定此次待读取数据所在字节中此次待读取数据之前的位数consume_n,并确定此次待读取数据的位数real_n;读取此次待读取数据所在字节的数据;对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;对之前读取到的数据r左移real_n位,将左移real_n位的r与v进行或运算,得到截止到当前已读取到的数据。这样,设备可以通过左移、右移和或运算即可读取到最终要读取的码流中的数据,无需生成掩码,往往左移、右移和或运算需要的时间比较少,从而,可以提高读取数据的速度。

需要说明的是:上述实施例提供的读取数据的装置在读取数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的读取数据的装置与读取数据的方法施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

图4是根据一示例性实施例示出的一种读取数据的装置1900的框图。例如,装置1900可以被提供为一服务器或终端。参照图4,装置1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理部件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述读取数据的方法。

装置1900还可以包括一个电源组件1926被配置为执行装置1900的电源管理,一个有线或无线网络接口1950被配置为将装置1900连接到网络,和一个输入输出(i/o)接口1958。装置1900可以操作基于存储在存储器1932的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。

装置1900可以包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

确定码流中当前可读的最大位数total_real_n;

当所述total_real_n等于0时,终止读取,得到最终要读取的所述码流中的数据;

当所述total_real_n大于0时,确定此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n,并确定所述此次待读取数据的位数real_n;

读取所述此次待读取数据所在字节的数据;

对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;

对之前读取到的数据r左移real_n位,将左移real_n位的r与所述v进行或运算,得到截止到当前已读取到的数据。

可选的,所述确定码流中当前可读的最大位数total_real_n,包括:

获取所述码流的总位数t、最终要读取的所述码流中的数据的位数n、截至到当前已读取到的数据的位数x以及此次待读取数据在所述码流中的位置p;

将所述t减去p差值与所述n减去x的差值的最小值,确定为码流中当前可读的最大位数total_real_n。

可选的,所述当所述total_real_n大于0时,确定此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n,包括:

当所述total_real_n大于0时,将所述p除以字节包含的位数的余数,确定为此次待读取数据所在字节中所述此次待读取数据之前的位数consume_n。

可选的,所述方法还包括:

获取最终要读取的所述码流中的数据在所述码流中的目标位置;

将所述目标位置与所述x的和,确定为此次待读取数据在所述码流中的位置p。

可选的,所述确定所述此次待读取数据的位数real_n,包括:

将字节包含的位数减去所述consume_n的差值与所述total_real_n的最小值,确定为所述此次待读取数据的位数real_n。

本发明实施例中,确定码流中当前可读的最大位数total_real_n;当total_real_n等于0时,终止读取,得到最终要读取的码流中的数据;当total_real_n大于0时,确定此次待读取数据所在字节中此次待读取数据之前的位数consume_n,并确定此次待读取数据的位数real_n;读取此次待读取数据所在字节的数据;对读取到的数据左移consume_n位,对左移consume_n位后的数据右移字节包含的位数与real_n的差值位,得到此次读取到的数据v;对之前读取到的数据r左移real_n位,将左移real_n位的r与v进行或运算,得到截止到当前已读取到的数据。这样,设备可以通过左移、右移和或运算即可读取到最终要读取的码流中的数据,无需生成掩码,往往左移、右移和或运算需要的时间比较少,从而,可以提高读取数据的速度。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1