CN111007986B - 一种基于内存的文本分段传递的方法及装置 - Google Patents
一种基于内存的文本分段传递的方法及装置 Download PDFInfo
- Publication number
- CN111007986B CN111007986B CN201911064887.XA CN201911064887A CN111007986B CN 111007986 B CN111007986 B CN 111007986B CN 201911064887 A CN201911064887 A CN 201911064887A CN 111007986 B CN111007986 B CN 111007986B
- Authority
- CN
- China
- Prior art keywords
- text
- memory
- memory block
- memory blocks
- transmitted
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于内存的文本分段传递的方法及装置,属于计算机信息系统技术领域,特别涉及一种基于内存的文本分段传递的方法,其中,数据读取方法能将内存划分成若干个内存块,从待传递文件中获取文本,并保存至内存块中;在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本;在已保存文本的内存块的数量达到启动阈值的情形下,继续从待传递文件中获取预设大小的文本;数据监测方法能从保存有文本的内存块中获取文本,释放内存块;对获取到文本进行检测,在检测到目标文本时,停止从待传递文件中获取文本,释放所有已保存文本的内存块。本发明内存块能被快速循环利用,避免数据冗余和资源浪费。
Description
技术领域
本发明属于计算机信息系统技术领域,特别涉及一种基于内存的文本分段传递的方法及装置。
背景技术
随着计算机网络技术的发展,软件设计与开发得到广泛应用,在软件设计的过程中,不可避免地要进行数据处理,将数据的生产和使用分开独立处理,不仅能有效提高模块的独立性,还能达到解耦的效果。
在现有技术中,数据在传输通常采用以下方式:以参数或返回值的方式传递数据,或者是使用内存复制的方式直接传递数据。
本发明人经研究发现,现有技术中,通过先分配好内存块,在内存块中保存文本数据,进行数据传递的过程中,由于未知待传递的文本大小,容易导致分配固定大小的内存块致使内存访问越界,或者空间浪费。
发明内容
为了至少解决上述技术问题,本发明提供了一种基于内存的文本分段传递的方法及装置。
根据本发明第一方面,提供了一种基于内存的文本分段传递的方法,包括数据读取方法和数据监测方法两部分,其中,数据读取方法,包括:
将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中;
在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本;
在已保存文本的内存块的数量达到启动阈值的情形下,继续从待传递文件中获取预设大小的文本;
数据监测方法包括:
从保存有文本的内存块中获取文本,释放内存块;
对获取到文本进行检测,在检测到获取到的文本为目标文本,并且存在保存有文本的其他内存块的情形下,停止从待传递文件中获取预设大小的文本,释放所有已保存文本的内存块。
进一步地,所述将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中,包括:
将内存划分为大小相同、均为内存块阈值的若干个内存块,将划分成的内存块数量作为分配阈值,从待传递文件中依次提取预设大小的文本,并将提取到的文本逐个写入内存块中。
进一步地,所述方法还包括:
在已保存到内存块中的文本的大小达到内存块阈值的情形下,计算能写入到内存块中的最后一个字节完整字符的位置,将能写入到当前内存块的部分保存至当前内存块中;
根据最后一个字节完整字符的位置,获取下一个预设大小的文本,并将其保存到内存块中。
进一步地,所述根据最后一个字节完整字符的位置,获取下一个预设大小的文本,并将其保存到内存块中,包括:
从最后一个字节完整字符的位置前预设长度字符开始,获取预设大小的文本,将获取到的文本保存至内存块中。
进一步地,所述在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本,替换为:
实时检测已保存文本的内存块的数量,在已保存文本的内存块的数量达到分配阈值的情形下,停止从待传递文件中获取预设大小的文本。
进一步地,创建一个单向链表,将所述内存块保存至链表中。
进一步地,采用第一线程实施所述数据读取方法,采用第二线程实施所述数据监测方法。
根据本发明第二方面,提供一种基于内存的文本分段传递的装置,包括数据读取模块和数据监测模块两部分,其中,数据读取模块,包括:
内存划分子模块,用于将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中;
容量监测子模块,与所述内存划分子模块连接,用于在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本;
启动监测子模块,与所述内存划分子模块连接,用于在已保存文本的内存块的数量达到启动阈值的情形下,继续从待传递文件中获取预设大小的文本;
数据监测模块包括,
数据读取子模块,用于从保存有文本的内存块中获取文本,释放内存块;
数据监测子模块,与所述数据读取子模块连接,用于对获取到文本进行检测,在检测到获取到的文本为目标文本,并且存在保存有待检测的文本的其他内存块的情形下,停止从待传递文件中获取预设大小的文本,释放所有已保存文本的内存块。
根据本发明第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
根据本发明第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有程序,所述程序被执行时,能够实现上述的基于内存的文本分段传递的方法。
本发明的有益效果:通过将内存划分为若干个内存块,将从待传递文件中获取到的文本写入内存块中,以此达到将代传递的文件以文本的形式分段保存在内存块中,并且通过从已保存有文本的内存块中读取已写入的文本,并释放内存块,进而达到内存块被快速循环利用,有效避免内存中存储大量数据,避免内存中数据冗余和资源的浪费现象的发生。进一步地,本发明中数据读取方法和数据监测方法协同运作,大大提高了检测文本的效率,进一步提升了传输待传递文件的工作效率。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
图1为本发明提供的数据读取方法流程图;
图2为本发明提供的数据监测方法流程图;
图3为本发明提供的数据读取模块结构示意图;
图4为本发明提供的数据监测模块结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
为了更清楚地说明本发明,下面结合优选实施例和附图对本发明做进一步的说明。附图中相似的部件以相同的附图标记进行表示。本领域技术人员应当理解,下面所具体描述的内容是说明性的而非限制性的,不应以此限制本发明的保护范围。
在本发明的第一方面,提供一种基于内存的文本分段传递的方法,包括:数据读取方法和数据监测方法两部分,其中数据读取方法如图1所示包括:
步骤201:将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中;
在本发明实施例中,先将内存划分为大小相同、均为内存块阈值的若干个内存块,将划分成的内存块数量作为分配阈值,从待传递文件中依次提取预设大小的文本,并将提取到的文本逐个写入内存块中,其中,内存块阈值可以为1Mb,文本的预设大小可以为1Kb。
进一步地,可以预先将内存划分为若干个内存块,通过第一线程从待传递文件中依次获取预设大小的文本,并逐个将获取到的文本以写的方式保存到内存块中。
本实施例中,以内存划分成分配阈值为100、内存块阈值为1Mb的100个内存块,进行举例说明,第一线程从待传递文件中获取1Kb的文本,并将该文本写入到1Mb的内存块中。
步骤202:在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本;
在本步骤中,首先,可以在已保存到内存块中的文本的大小达到内存块阈值的情形下,计算能写入到内存块中的最后一个字节完整字符的位置,将能写入到当前内存块的部分保存至当前内存块中;其次,可以根据最后一个字节完整字符的位置,获取下一个预设大小的文本,并将其保存到内存块中;最后,实时检测已保存文本的内存块的数量,在已保存文本的内存块的数量达到分配阈值的情形下,停止从待传递文件中获取预设大小的文本。
其中,内存阈值为各内存块的内存块阈值总和,也是内存的最大容量。
在本发明实施例中,在已保存到内存块中的文本的大小达到、甚至是超过内存块阈值即达到、甚至是超过预先分配的内存块大小的情形下,计算能写入内存块中最后一个字节完整字符的位置,将获取到的文本中能写入内存块中最后一个字节完整字符的位置之前的部分写入到当前内存块中。
在本发明实施例中,在已保存到内存块中的文本的大小达到内存块阈值即达到预先分配的内存块大小的情形下,计算能写入内存块中最后一个字节完整字符的位置,从最后一个字节完整字符的位置前预设长度字符开始,获取预设大小的文本,将其保存至预先分配的内存块中,其中,预设长度字符可以为50字符。
本技术方案中,通过从最后一个字节完整字符的位置前的预设长度字符开始,获取预设大小的文本,能够有效地避免文本被内存块分段导致的数据不完整,影响后续对文本检测的准确性。
在本发明实施例中,实时检测已保存文本的内存块的数量,在全部内存即划分的所有内存块中都已保存文本的情形下,停止从待传递文件中获取预设大小的文本。本技术方案通过实时检测已保存文本的内存块的数量,并在所有内存块中都已保存文本的情形下,停止向内存块中写入文本,能够有效地避免内存块中存储的数据溢出,进而规避了数据传输过程中数据缺失现象的发生。
步骤203:在已保存文本的内存块的数量达到启动阈值的情形下,继续从待传递文件中获取预设大小的文本。
在本发明实施例中,文本存入内存块和读取内存块中的数据、释放内存块,对读取到的数据进行检测这一系列的过程,使得内存块在写入数据和读取数据、释放内存的过程中保持一个动平衡,使内存块能够被重复利用,提高了内存的工作效率,进而提升了文件传递的速度,有效避免了传统技术中占用内存的现象发生。
相对应的,本发明中,在数据读取的过程中,同时还进行数据监测,如图2所示,包括:
步骤201’:从保存有文本的内存块中获取文本,释放内存块;
在本发明实施例中,从已保存有文本的内存块中读取已写入的文本,并释放内存,进而达到内存被快速循环利用,有效避免内存中存储大量数据,造成数据冗余和资源的浪费。
进一步地,通过第二线程从保存有文本的内存块中获取已保存的文本,并释放当前内存块。
本发明技术方案,通过采用多线程的方式,通过第一线程将待传递文本写入内存的同时,可以通过第二线程将内存中的文本读取出来,并释放内存,使得内存能够快速地被循环利用,避免内存被存储的数据长时间占用,造成资源浪费,降低内存的使用效率。
步骤202’:对获取到文本进行检测,在检测到获取到的文本为目标文本,并且存在保存有待检测的文本的其他内存块的情形下,停止从待传递文件中获取预设大小的文本,释放所有已保存文本的内存块。
在本发明实施例中,本步骤具体包括:
步骤a1:对文本进行检测,判断文本是否为目标文本,是则执行步骤a2;否则执行步骤201’;
步骤a2:判断是否存在保存有文本的其他内存块,即判断是否存在保存有待检测的文本的其他内存块,是则执行步骤a3;否则结束操作;
步骤a3:停止从待传递文件中获取预设大小的文本,释放所有已保存文本的内存块,结束操作。
本步骤通过对获取到的文本进行检测,能够及时的发现目标文本,并在检测出目标文本的情形下,停止第一线程的执行,并且快速地释放所有已使用的内存块,清空内存,释放资源。
在本发明的另一实施例中,提供一种基于内存的文本分段传递的方法,包括数据读取方法和数据监测方法,通过文本生产、保存,再使用该文本,实现文本的传输,即数据的传输。其中,文本的生产方法,包括:
步骤401:将内存划分成若干个内存块,创建一个单向链表;
在本实施例中,将内存分配成若干个内存块,内存块大小固定为m,创建单向链表list,其成员有pData指向分配内存块的指针,pNext指向下一个成员的指针,链表的最大容量为n。
步骤402:根据待传递文件生产文本,为生产的文本分配内存块,将文本写入内存块中,并保存至链表中;
在本实施例中,在数据生产者从待传递文件中获取预设大小的文本时,为生产的文本分配内存块,将文本写入内存块中,并将内存块放入链表list中,数据生产者不断生产数据,即从待传递文件中不断获取文本,使得要写入内存块中的文本不断增多,进而链表list的成员数量也不断增多。
步骤403:当链表中的成员数量达到链表最大容量的情形下,数据生产者停止生产文本。
在本发明实施例中,随着链表list的成员数量也不断增多,存储的文本不断增大,当list中成员数量达到链表最大容量n时,生产者暂停生产文本。
相对应的,文本的使用方法,包括:
步骤401’:从链表中取出一个成员,在使用完该文本后,释放内存块;
在本发明实施例中,数据监测者不断地从链表list中获取成员,具体地,可以从链表中取出第一个成员,在使用完该成员中保存的文本后,释放该成员的内存块。
步骤402’:检测链表的成员数量,在链表成员数量为零的情形下,文本读取结束,完成文本的传输。
在本发明实施例中,具体可以实时检测链表的成员数量,在成员穷尽时,说明已不存在待读取的文本,此时文本传输工作完成。
这种情况下,可以使用链表保存内存块指针的方式,分块存储,但因为所需的内存大小未知,因此仍然需要分配足够大的内存空间,并且当数据监测者在使用数据过程种,终止数据的使用时,数据生成者此时可能已经生成了太多的数据,造成cpu和内存的浪费。
根据本发明第二方面,提供一种基于内存的文本分段传递的装置,包括数据读取模块60和数据监测模块80,其中,数据读取模块60,如图3所示,包括:
内存划分子模块601,用于将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中;
在本发明实施例中,内存划分子模块601,用于先将内存划分为大小相同、均为内存块阈值的若干个内存块,将划分成的内存块数量作为分配阈值,从待传递文件中依次提取预设大小的文本,并将提取到的文本逐个写入内存块中,其中,内存块阈值可以为1Mb,文本的预设大小可以为1Kb。
进一步地,可以预先将内存划分为若干个内存块,通过第一线程从待传递文件中依次获取预设大小的文本,并逐个将获取到的文本以写的方式保存到内存块中。
本实施例中,以内存划分成分配阈值为100、内存块阈值为1Mb的100个内存块,进行举例说明,第一线程从待传递文件中获取1Kb的文本,并将该文本写入到1Mb的内存块中。
容量监测子模块602,与所述内存划分子模块601连接,用于在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本;
在本步骤中,容量监测子模块602可以在已保存到内存块中的文本的大小达到内存块阈值的情形下,计算能写入到内存块中的最后一个字节完整字符的位置,将能写入到当前内存块的部分保存至当前内存块中;根据最后一个字节完整字符的位置,获取下一个预设大小的文本,并将其保存到内存块中;实时检测已保存文本的内存块的数量,在已保存文本的内存块的数量达到分配阈值的情形下,停止从待传递文件中获取预设大小的文本。
其中,内存阈值为各内存块的内存块阈值总和,也是内存的最大容量。
在本发明实施例中,容量监测子模块602在已保存到内存块中的文本的大小达到、甚至是超过内存块阈值,即达到、甚至是超过预先分配的内存块大小的情形下,计算能写入内存块中最后一个字节完整字符的位置,将获取到的文本中能写入内存块中最后一个字节完整字符的位置之前的部分写入到当前内存块中。
在本发明实施例中,容量监测子模块602在已保存到内存块中的文本的大小达到内存块阈值即达到预先分配的内存块大小的情形下,计算能写入内存块中最后一个字节完整字符的位置,从最后一个字节完整字符的位置前预设长度字符开始,获取预设大小的文本,将其保存至预先分配的内存块中,其中,预设长度字符可以为50字符。
本技术方案中,通过从最后一个字节完整字符的位置前的预设长度字符开始,获取预设大小的文本,能够有效地避免文本被内存块分段导致的数据不完整,影响后续对文本检测的准确性。
在本发明实施例中,实时检测已保存文本的内存块的数量,在全部内存即划分的所有内存块中都已保存文本的情形下,停止从待传递文件中获取预设大小的文本。本技术方案通过实时检测已保存文本的内存块的数量,并在所有内存块中都已保存文本的情形下,停止向内存块中写入文本,能够有效地避免内存块中存储的数据溢出,进而规避了数据传输过程中数据缺失现象的发生。
启动监测子模块603,与所述内存划分子模块601连接,用于在已保存文本的内存块的数量达到启动阈值的情形下,继续从待传递文件中获取预设大小的文本;
在本发明实施例中,文本存入内存块和读取内存块中的数据、释放内存块,对读取到的数据进行检测这一系列的过程,使得内存块在写入数据和读取数据、释放内存的过程中保持一个动平衡,使内存块能够被重复利用,提高了内存的工作效率,进而提升了文件传递的速度,有效避免了传统技术中占用内存的现象发生。
数据监测模块80,如图4所示,包括,
数据读取子模块801,用于从保存有文本的内存块中获取文本,释放内存块;
在本发明实施例中,数据读取子模块801,用于从已保存有文本的内存块中读取已写入的文本,并释放内存,进而达到内存被快速循环利用,有效避免内存中存储大量数据,造成数据冗余和资源的浪费。
进一步地,通过第二线程从保存有文本的内存块中获取已保存的文本,并释放当前内存块。
本发明技术方案,通过采用多线程的方式,通过第一线程将待传递文本写入内存的同时,可以通过第二线程将内存中的文本读取出来,并释放内存,使得内存能够快速地被循环利用,避免内存被存储的数据长时间占用,造成资源浪费,降低内存的使用效率。
数据监测子模块802,与所述数据读取子模块801连接,用于对获取到文本进行检测,在检测到获取到的文本为目标文本,并且存在保存有待检测的文本的其他内存块的情形下,停止从待传递文件中获取预设大小的文本,释放所有已保存文本的内存块。
在本实施例中,数据监测子模块802,通过对获取到的文本进行检测,能够及时的发现目标文本,并在检测出目标文本的情形下,停止第一线程的执行,并且快速地释放所有已使用的内存块,清空内存,释放资源。
在本发明另一实施例中,提供一种基于内存的文本分段传递的装置,包括数据读取模块和数据监测模块,通过文本生产、保存,再使用该文本,实现文本的传输,即数据的传输。其中,数据读取的模块,包括:
内存划分子模块,用于将内存划分成若干个内存块,创建一个单向链表,根据待传递文件生产文本,为生产的文本分配内存块,将文本写入内存块中,并保存至链表中;
在本实施例中,内存划分子模块,用于将内存分配成若干个内存块,内存块大小固定为m,创建单向链表list,其成员有pData指向分配内存块的指针,pNext指向下一个成员的指针,链表的最大容量为n。
在从待传递文件中获取预设大小的文本时,为生产的文本分配内存块,将文本写入内存块中,并将内存块放入链表list中,数据生产者不断生产数据,即从待传递文件中不断获取文本,使得要写入内存块中的文本不断增多,进而链表list的成员数量也不断增多。
容量监测子模块,用于当链表中的成员数量达到链表最大容量的情形下,数据生产者停止生产文本。
在本发明实施例中,随着链表list的成员数量也不断增多,存储的文本不断增大,当list中成员数量达到链表最大容量n时,生产者暂停生产文本。
相对应的,数据监测模块,包括:
数据读取子模块,用于从链表中取出一个成员,在使用完该文本后,释放内存块;
在本发明实施例中,数据读取子模块用于不断地从链表list中获取成员,具体地,可以从链表中取出第一个成员,在使用完该成员中保存的文本后,释放该成员的内存块。
数据监测子模块,用于检测链表的成员数量,在链表成员数量为零的情形下,文本读取结束,完成文本的传输。
在本发明实施例中,数据监测子模块具体可以实时检测链表的成员数量,在成员穷尽时,说明已不存在待读取的文本,此时文本传输工作完成。
这种情况下,可以使用链表保存内存块指针的方式,分块存储,但因为所需的内存大小未知,因此仍然需要分配足够大的内存空间,并且当数据监测者在使用数据过程种,终止数据的使用时,数据生成者此时可能已经生成了太多的数据,造成cpu和内存的浪费。
根据本发明第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
根据本发明第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有程序,所述程序被执行时,能够实现上述的基于内存的文本分段传递的方法。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
应当理解,以上借助优选实施例对本发明的技术方案进行的详细说明是示意性的而非限制性的。本领域的普通技术人员在阅读本发明说明书的基础上可以对各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种基于内存的文本分段传递的方法,其特征在于,包括数据读取方法和数据监测方法两部分,其中,数据读取方法,包括:
将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中;
在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本;
在已保存文本的内存块的数量达到启动阈值的情形下,继续从待传递文件中获取预设大小的文本;
数据监测方法包括:
从保存有文本的内存块中获取文本,释放内存块;
对获取到文本进行检测,在检测到获取到的文本为目标文本,并且存在保存有文本的其他内存块的情形下,停止从待传递文件中获取预设大小的文本,释放所有已保存文本的内存块;
所述将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中,包括:
将内存划分为大小相同、均为内存块阈值的若干个内存块,将划分成的内存块数量作为分配阈值,从待传递文件中依次提取预设大小的文本,并将提取到的文本逐个写入内存块中;
所述方法还包括:
在已保存到内存块中的文本的大小达到内存块阈值的情形下,计算能写入到内存块中的最后一个字节完整字符的位置,将能写入到当前内存块的部分保存至当前内存块中;
根据最后一个字节完整字符的位置,获取下一个预设大小的文本,并将其保存到内存块中。
2.如权利要求1所述的方法,其特征在于,
所述根据最后一个字节完整字符的位置,获取下一个预设大小的文本,并将其保存到内存块中,包括:
从最后一个字节完整字符的位置前预设长度字符开始,获取预设大小的文本,将获取到的文本保存至内存块中。
3.如权利要求1所述的方法,其特征在于,
所述在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本,替换为:
实时检测已保存文本的内存块的数量,在已保存文本的内存块的数量达到分配阈值的情形下,停止从待传递文件中获取预设大小的文本。
4.如权利要求1所述的方法,其特征在于,
创建一个单向链表,将所述内存块保存至链表中。
5.如权利要求1所述的方法,其特征在于,
采用第一线程实施所述数据读取方法,采用第二线程实施所述数据监测方法。
6.一种基于内存的文本分段传递的装置,其特征在于,包括数据读取模块和数据监测模块两部分,其中,数据读取模块,包括:
内存划分子模块,用于将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中;
容量监测子模块,与所述内存划分子模块连接,用于在已保存到各内存块中的文本的大小达到内存阈值的情形下,停止从待传递文件中获取预设大小的文本;
启动监测子模块,与所述内存划分子模块连接,用于在已保存文本的内存块的数量达到启动阈值的情形下,继续从待传递文件中获取预设大小的文本;
数据监测模块包括,
数据读取子模块,用于从保存有文本的内存块中获取文本,释放内存块;
数据监测子模块,与所述数据读取子模块连接,用于对获取到文本进行检测,在检测到获取到的文本为目标文本,并且存在保存有待检测的文本的其他内存块的情形下,停止从待传递文件中获取预设大小的文本,释放所有已保存文本的内存块;
内存划分子模块,还用于将内存划分成若干个内存块,从待传递文件中获取预设大小的文本,并将其保存至内存块中,包括:将内存划分为大小相同、均为内存块阈值的若干个内存块,将划分成的内存块数量作为分配阈值,从待传递文件中依次提取预设大小的文本,并将提取到的文本逐个写入内存块中;
容量监测子模块,还用于在已保存到内存块中的文本的大小达到内存块阈值的情形下,计算能写入到内存块中的最后一个字节完整字符的位置,将能写入到当前内存块的部分保存至当前内存块中;根据最后一个字节完整字符的位置,获取下一个预设大小的文本,并将其保存到内存块中。
7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-5任一项所述方法的步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序,所述程序被执行时,能够实现如权利要求1-5任一项所述的基于内存的文本分段传递的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911064887.XA CN111007986B (zh) | 2019-11-04 | 2019-11-04 | 一种基于内存的文本分段传递的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911064887.XA CN111007986B (zh) | 2019-11-04 | 2019-11-04 | 一种基于内存的文本分段传递的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111007986A CN111007986A (zh) | 2020-04-14 |
CN111007986B true CN111007986B (zh) | 2022-09-30 |
Family
ID=70111372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911064887.XA Active CN111007986B (zh) | 2019-11-04 | 2019-11-04 | 一种基于内存的文本分段传递的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111007986B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103810115A (zh) * | 2012-11-15 | 2014-05-21 | 深圳市腾讯计算机系统有限公司 | 一种内存池的管理方法和装置 |
CN104077191A (zh) * | 2014-07-18 | 2014-10-01 | 广州金山网络科技有限公司 | 一种用于管理内存资源的方法及装置 |
CN105302840A (zh) * | 2014-07-31 | 2016-02-03 | 阿里巴巴集团控股有限公司 | 一种缓存管理方法与设备 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190179948A1 (en) * | 2017-12-12 | 2019-06-13 | International Business Machines Corporation | Storing unstructured data in a structured framework |
-
2019
- 2019-11-04 CN CN201911064887.XA patent/CN111007986B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103810115A (zh) * | 2012-11-15 | 2014-05-21 | 深圳市腾讯计算机系统有限公司 | 一种内存池的管理方法和装置 |
CN104077191A (zh) * | 2014-07-18 | 2014-10-01 | 广州金山网络科技有限公司 | 一种用于管理内存资源的方法及装置 |
CN105302840A (zh) * | 2014-07-31 | 2016-02-03 | 阿里巴巴集团控股有限公司 | 一种缓存管理方法与设备 |
CN108132842A (zh) * | 2017-12-15 | 2018-06-08 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111007986A (zh) | 2020-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105159777B (zh) | 进程的内存回收方法及装置 | |
US20160253104A1 (en) | Techniques for automatically freeing space in a log-structured storage system | |
US11151155B2 (en) | Memory use in a distributed index and query system | |
DK3059679T3 (en) | CONTROL UNIT, FLASH MEMORY UNIT, PROCEDURE FOR IDENTIFICATION OF DATA BLOCK STABILITY, AND PROCEDURE FOR STORING DATA ON THE FLASH MEMORY UNIT | |
CN108196937B (zh) | 字符串对象的处理方法、装置、计算机设备和存储介质 | |
CN107957848B (zh) | 重删处理方法及存储设备 | |
CN104412240A (zh) | 用于存储器管理的系统和方法 | |
CN109983459B (zh) | 用于标识语料库中出现的n-gram的计数的方法和设备 | |
KR102114245B1 (ko) | 그래픽스 상태 관리 장치 및 방법 | |
CN108304259B (zh) | 内存管理方法及系统 | |
US20230394307A1 (en) | Data caching method and apparatus for multiple concurrent deep learning training tasks | |
US11221947B2 (en) | Concurrent garbage collection with minimal graph traversal | |
US8966212B2 (en) | Memory management method, computer system and computer readable medium | |
DE102020117350A1 (de) | Speichersystem einschliesslich heterogener speicher, computersystem mit dem speichersystem und datenverwaltungsverfahren dafür | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
CN108984323B (zh) | 一种共享存储空间的调度方法及系统 | |
CN108829345B (zh) | 日志文件的数据处理方法和终端设备 | |
CN111007986B (zh) | 一种基于内存的文本分段传递的方法及装置 | |
EP4170505A1 (en) | Data writing method and device | |
DE112016006050T5 (de) | Verfahren zum erkennen von schadsoftware mit minimaler leistungsminderung | |
KR101950759B1 (ko) | 저장 장치의 메모리 컨트롤러가 수행하는 가비지 컬렉션 방법 및 메모리 컨트롤러 | |
CN108628678B (zh) | 内存参数的确定方法、装置及设备 | |
US20160098203A1 (en) | Heterogeneous Swap Space With Dynamic Thresholds | |
CN115756838A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN109086223B (zh) | 一种控制垃圾回收的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |