CN113391792A - 安卓平台使用字符串的方法、存储介质、电子设备及系统 - Google Patents

安卓平台使用字符串的方法、存储介质、电子设备及系统 Download PDF

Info

Publication number
CN113391792A
CN113391792A CN202110624127.0A CN202110624127A CN113391792A CN 113391792 A CN113391792 A CN 113391792A CN 202110624127 A CN202110624127 A CN 202110624127A CN 113391792 A CN113391792 A CN 113391792A
Authority
CN
China
Prior art keywords
character string
subclass
file
size
acquisition interface
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.)
Pending
Application number
CN202110624127.0A
Other languages
English (en)
Inventor
周志刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN202110624127.0A priority Critical patent/CN113391792A/zh
Publication of CN113391792A publication Critical patent/CN113391792A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Telephone Function (AREA)

Abstract

本发明公开了一种安卓平台使用字符串的方法、存储介质、电子设备及系统,涉及互联网移动端应用开发领域。该方法包括:创建用于字符串构造的基类,将其设置为无法拷贝,并抽象出所需的统一接口;创建以字符串大小构造对象的第一子类,其通过字符串大小的参数来构造其字符串对象,并在该类中对抽象出的统一接口进行实现;创建以读取文件方式来构造对象的第二子类,其通过文件句柄的参数来读取文件内容到构造的字符串对象中,并在该类中对抽象出的统一接口进行实现;当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。本发明不仅能高效便捷地基于各种不同的参数构造出字符串,而且能优选提高字符串使用的安全性和性能。

Description

安卓平台使用字符串的方法、存储介质、电子设备及系统
技术领域
本发明涉及互联网移动端应用开发领域,具体来讲是一种安卓(Android)平台使用字符串的方法、存储介质、电子设备及系统。
背景技术
在互联网移动端的程序设计中,特别是安卓(Android)平台的应用开发中,通常会在SO(SO文件是Unix的动态连接库文件,作用相当于Windows下的.dll文件)中处理各种字符串数据,包括从文件读取的字符串,或者是对大量字符串数据加密或者解密等。而常规的处理方式是根据需要自行调用系统API(Application Programming Interface,应用程序接口)函数进行处理,没有统一的接口或标准,使用起来非常不便、效率低下,而且还存在因多次拷贝字符串而损失性能并带来安全性隐患等问题。
因此,对于这种大量的字符串使用来说,如何提供一种高效便捷且能提高安全性和性能的方案,是本领域技术人员亟需解决的问题。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种安卓平台使用字符串的方法、存储介质、电子设备及系统,不仅能够高效便捷地基于各种不同的参数构造出字符串,而且能有效提高字符串使用时的安全性和性能,满足实际应用需求。
为达到以上目的,第一方面,本发明实施例提供一种安卓平台使用字符串的方法,其包括:
S1、创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口;
S2、创建以字符串大小来构造对象的第一子类,所述第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
S3、创建以读取文件方式来构造对象的第二子类,所述第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
S4、当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。
作为一个优选的实施方案,步骤S1中,将其设置为无法进行拷贝的功能,包括以下操作:将所述基类的拷贝函数和赋值函数设置成delete模式。
作为一个优选的实施方案,步骤S2,包括以下操作:
定义一个以字符串大小来构造对象的第一子类,并使其继承于所述基类;
在所述第一子类中,创建第一成员变量和第二成员变量;所述第一成员变量用于存储分配的字符串的首地址空间,所述第二成员变量用于记录字符串的内存空间的大小;
在所述第一子类中,创建构造函数并将其设置为:用于将传入的字符串大小的参数赋值给第二成员变量,并调用系统的内存分配方法new来分配字符串空间并存储到第一成员变量中;且分配字符串空间时多分配一个空间用于存储结尾符,并将最后一个字符填充成字符串的结尾符;
在所述第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现,使得所述字符串数据获取接口返回第一成员变量、所述字符串大小获取接口返回第二成员变量;并创建一个预设的接口函数来获取所分配的字符串空间,用于通过获取的字符串空间来进行赋值。
作为一个优选的实施方案,步骤S3,包括以下操作:
定义一个以读取文件方式来构造对象的第二子类,并使其继承于所述基类;
在所述第二子类中,创建第三成员变量、第四成员变量和第五成员变量;所述第三成员变量用于存储文件句柄,所述第四成员变量用于存储字符串的大小,所述第五成员变量用于存储字符串的内容;
在所述第二子类中,创建构造函数并将其设置为:用于将传入的文件句柄的参数、文件大小的参数分别赋值给第三成员变量、第四成员变量;
在所述第二子类中,对所述字符串数据获取接口进行实现,使得所述字符串数据获取接口采用延时读取的方式进行读取操作,且读取过程中采用内存映射的文件模式,并将文件映射的结果保存至第五成员变量中返回;同时,对所述字符串大小获取接口进行实现,使得所述字符串大小获取接口先调用一次读取文件的操作后,再返回第四成员变量。
作为一个优选的实施方案,所述字符串数据获取接口采用延时读取的方式进行读取操作,且读取过程中采用内存映射的文件模式,并将文件映射的结果保存至第五成员变量中返回,具体包括以下操作:
所述字符串数据获取接口判断当前是否已经读取过,若是,则返回第五成员变量,否则,进行读取操作;读取过程中,通过调用系统函数mmap来映射所要读取的文件,并采用写时复制的私有映射方式;同时,将文件映射的结果保存至第五成员变量中返回。
作为一个优选的实施方案,步骤S3还包括以下操作:
创建一个预设的接口函数,用于实现通过传入文件名称来构造字符串对象的方法;所述预设的接口函数为一个静态函数,且入参为文件名称,当该函数被调用时将通过调用系统函数open来获取文件句柄,获取到文件句柄后通过调用第二子类中创建的构造函数来构造字符串对象,并使用智能指针来进行存储并返回。
作为一个优选的实施方案,步骤S2和S3中,均还包括以下操作:在各自子类的析构函数中进行资源的释放操作。
第二方面,本发明实施例提供一种安卓平台使用字符串的系统,其包括:
基类创建单元,其用于创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口;
第一子类创建单元,其用于创建以字符串大小来构造对象的第一子类,所述第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
第二子类创建单元,其用于创建以读取文件方式来构造对象的第二子类,所述第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
使用处理单元,其用于当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。
第三方面,本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面实施例中的方法。
第四方面,本发明实施例还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面实施例中的方法。
本发明的有益效果在于:
(1)本发明中,针对字符串的使用(构造)提供了一套统一的接口,使用者可以方便的基于各种不同的参数来构造出一样的字符串,使用便捷、高效;同时在基类中限制了其拷贝的可能性,使得使用者无法将其进行拷贝,从而提高了程序的性能及安全性。
(2)本发明中,提供了多种字符串的构造方式,包括以字符串大小来构造对象和以读取文件方式来构造对象。因此,使用者可根据不同的参数选择不同的构造方法,构造方式灵活可选,适应性更广,满足了实际应用需求。
(3)本发明中,第二子类通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中时,采用的是延时读取的方式,也就是实际用的时候才进行读取操作,能有效保障系统性能;与此同时,在进行读取操作时,使用了性能更高的内存映射的文件模式,从而进行文件映射而不需要读取文件本身,从而进一步使得性能更快更好,使用效果更加理想。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面对实施例对应的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中安卓平台使用字符串的方法的流程图;
图2为本发明实施例中安卓平台使用字符串的系统的结构框图。
图中:10-基类创建单元,20-第一子类创建单元,30-第二子类创建单元,40-使用处理单元。
具体实施方式
针对现有技术中,在SO中处理各种字符串时是根据需要自行调用系统API函数进行处理,没有统一的接口或标准,使用起来非常不便、效率低下,而且还存在因多次拷贝字符串而损失性能并带来安全性隐患等问题。本发明旨在提供一种安卓平台使用字符串的方法、存储介质、电子设备及系统,不仅能够高效便捷地基于各种不同的参数构造出字符串,而且能有效提高字符串使用时的安全性和性能,满足实际应用需求。
为达到上述技术效果,本发明的主要设计思路为:
创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口;
创建以字符串大小来构造对象的第一子类,所述第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
创建以读取文件方式来构造对象的第二子类,所述第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。
综上所述,本发明中会创建用于字符串构造的基类,并在该基类中抽象出字符串构造所需的统一接口,而抽象出的统一接口则会在所创建的不同功能的子类(第一子类、第二子类)中进行相应的实现,从而使得使用者(调用者)能够高效快捷地基于各种不同的参数构造出一样的字符串并使用;同时在基类中限制了其拷贝的可能性,使得使用者无法将其进行拷贝,从而提高了程序的性能及安全性;并且,本方案还提供了多种字符串的构造方式,可根据不同的参数选择不同的构造方法,构造方式灵活可选,适应性更广,满足了实际应用需求。
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合说明书附图以及具体的实施例对本发明的技术方案进行详细的说明。
但需说明的是:接下来要介绍的示例仅是一些具体的例子,而不作为限制本发明的实施例必须为如下具体的步骤、数值、条件、数据、顺序等。本领域技术人员可以通过阅读本说明书来运用本发明的构思来构造本说明书中未提到的更多实施例。
实施例一
参见图1所示,本实施例提供了一种安卓平台使用字符串的方法,该方法包括以下步骤:
S1、创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口。
可以理解的是,为了令使用者(调用者)能够高效快捷地实现对字符串的构造和使用,而无需自行调用复杂多样的系统API函数进行处理。本实施例中,首先会创建用于字符串构造的基类,并在该基类中抽象出字符串构造所需的统一接口,而抽象出的统一接口则会在后续所创建的不同功能的子类中进行相应的实现,从而使得使用者(调用者)能够高效快捷地基于各种不同的参数构造出一样的字符串并使用。除此之外,本实施例中还会在创建的基类中限制其拷贝的功能,从而令使用者(调用者)时无法将其进行拷贝,进而避免了因多次拷贝字符串而损失性能并带来安全性隐患等问题。
具体来说,作为一种可选的实施方式,步骤S1可具体包括以下操作:
S101、定义一个用于字符串构造的基类,并通过设置其虚析构函数来防止其子类释放时内存泄露。举例来说,可定义一个名为class NativeString的抽象基类来封装上述用于字符串构造的基类,其相应代码设计可如下:
class NativeString{
virtual~NativeString(){} //通过设置虚析构函数~NativeString()来防止其子类释放时内存泄露。
S102、将所述基类的拷贝函数和赋值函数设置成delete模式。可以理解的是,本实施例中通过将基类的拷贝函数和赋值函数设计成delete模式,从而实现将创建的基类设置为无法进行拷贝的功能,进而就可以防止其对象进行拷贝。举例来说,还是以定义类名为class NativeString的抽象基类来说,将基类class NativeString的拷贝函数和赋值函数设置成delete模式,其相应代码设计可如下:
NativeString(const NativeString&)=delete; //将拷贝函数设置成delete模式;
NativeString&operator=(const NativeString&)=delete;//将赋值函数设置成delete模式。
S103、在所述基类中抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口。可以理解的是,本实施例在对需要使用到的统一接口进行抽象时,特别抽象出了字符串数据获取接口和字符串大小获取接口。其中,利用字符串数据获取接口可获取到字符串数据,具体来说可通过调用此接口获取存储在此对象的字符串的首地址;利用字符串大小获取接口可获取到此对象的字符串的大小。举例来说,抽象出的字符串数据获取接口、字符串大小获取接口可设计如下:
virtual const char*c_str()const=0; //此接口用于获取存储在此对象的字符串的首地址;
virtual size_t size()const=0; //此接口用于获取字符串的大小。
S2、创建以字符串大小来构造对象的第一子类,该第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现。
可以理解的是,本实施例在基于所创建的基类的基础上,还会创建一个以字符串大小来构造对象的第一子类。通过该第一子类,可提供一种以字符串大小来构造字符串对象的方法。与传统的构造字符串对象的方法不同,本实施例所创建的第一子类是通过传入的字符串大小的参数来构造其字符串对象,而不是传入字符串本身。因此,在具体实现时,该子类会通过字符串大小优先将存储字符串的内存空间构造出来,然后通过一个预设好的接口函数来获取创建好的内存空间,从而令使用者(调用者)可通过获取的内存空间来赋值。
具体来说,作为一种可选的实施方式,步骤S2可具体包括以下操作:
S201、定义一个以字符串大小来构造对象的第一子类,并使其继承于所述基类。举例来说,可定义一个类名为class BufferString的第一子类来封装相关功能,其相应代码可设计为:
class BufferString:public NativeString。
S202、在第一子类中,创建两个成员变量:第一成员变量和第二成员变量;其中,第一成员变量用于存储分配的字符串的首地址空间,第二成员变量用于记录字符串的内存空间的大小。举例来说,创建的两个成员变量可设计如下:
char*data_1; //第一成员变量data_1,用于存储字符串的首地址空间;
size_t size_1; //第二成员变量size_1,用于记录字符串的内存空间的大小。
S203、在第一子类中,创建构造函数并将其设置为:用于将传入的字符串大小的参数赋值给第二成员变量,并调用系统的内存分配方法new来分配字符串空间并存储到第一成员变量中;且分配字符串空间时多分配一个空间用于存储结尾符,并将最后一个字符填充成字符串的结尾符。可以理解的是,由于该构造函数是通过调用系统的内存分配方法new来分配字符串空间的,因此,使用时可以通过系统函数strlen来获取字符串的长度,这也便于输出打印字符串。
举例来说,创建的构造函数可设计如下:
BufferString(size_t size):size_1(size) //将字符串大小参数size赋值给第二成员变量size_1;
data_1(new char[size_1+1]) //调用系统的内存分配方法new来分配所需的字符串空间并存储到第一成员变量data_1中;同时,考虑到字符串需要一个结尾符,所以分配字符串空间时需要多分配一个空间用于存储结尾符;
data_[size_1]='\0' //将最后一个字符填充成字符串的结尾符。
S204、在第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现,使得所述字符串数据获取接口返回第一成员变量(即分配的字符串的首地址)、所述字符串大小获取接口返回第二成员变量(即字符串的大小);同时,创建一个预设的接口函数来获取所分配的字符串空间,用于供使用者(调用者)通过获取的字符串空间来进行赋值。
举例来说,在第一子类中对所述字符串数据获取接口、字符串大小获取接口进行实现,具体可设计如下:
size_t size()const override{return size_1;} //字符串大小获取接口返回字符串的大小;
const char*c_str()const override{return data_1;} //字符串数据获取接口返回分配的字符串的首地址;
char*data(){return data_1;} //创建预设的接口函数来获取所分配的字符串空间,以供使用者(调用者)通过获取的字符串空间来进行赋值。
S205、在第一子类的析构函数中进行内存的释放,即释放上述所分配的字符串空间。可以理解的是,从步骤S203可以看出,对于创建的第一子类来说,是会根据字符串大小分配相应的内存空间的,因此需要管理所分配的内存空间。那么,当其被释放时则需要释放掉所分配的内存空间,因此则需要在析构函数中进行内存的释放。具体来说,可在析构函数中通过语句delete[]data_1来实现释放所分配的内存空间。
S3、创建以读取文件方式来构造对象的第二子类,该第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现。
可以理解的是,本实施例在创建有第一子类的基础上,还会创建一个以读取文件方式来构造对象的第二子类。通过该第二子类,可提供一种以读取文件方式来构造字符串对象的方法。与传统的构造字符串对象的方法不同,本实施例所创建的第二子类是通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中,而不是通过传入读取完后的文件内容到对象中。并且,还会在创建的第一子类中封装高性能的读取文件的模式,从而能够有效保障系统性能。
具体来说,作为一种可选的实施方式,步骤S3可具体包括以下操作:
S301、定义一个以读取文件方式来构造对象的第二子类,并使其继承于所述基类。举例来说,可定义一个类名为class FileString的第二子类来封装相关功能,其相应代码可设计为:
class FileString:public NativeString。
S302、在第二子类中,创建三个成员变量:第三成员变量、第四成员变量和第五成员变量;其中,第三成员变量用于存储文件句柄,第四成员变量用于存储字符串的大小,第五成员变量用于存储字符串的内容。举例来说,创建的三个成员变量可设计如下:
int fd_; //第三成员变量fd_,用于存储文件句柄;
size_t size_2; //第四成员变量size_2,用于存储字符串的大小;
mutable const char*data_2 //第五成员变量data_2,用于存储字符串的内容。
S303、在第二子类中,创建构造函数并将其设置为:用于将传入的文件句柄的参数、文件大小的参数分别赋值给第三成员变量、第四成员变量。
举例来说,创建的构造函数可设计如下:
FileString(int fd,size_t size); //该构造函数需要传入两个参数,一个是文件句柄的参数fd,另一个是文件大小的参数size;
fd_(fd); //将文件句柄的参数fd赋值给第三成员变量fd_;
size_2(size); //将文件大小的参数size赋值给第四成员变量size_2。
S304、在第二子类中,对所述字符串数据获取接口进行实现,使得所述字符串数据获取接口采用延时读取的方式进行读取操作,且读取过程中采用内存映射的文件模式,并将文件映射的结果保存至第五成员变量中返回;同时,对所述字符串大小获取接口进行实现,使得所述字符串大小获取接口先调用一次读取文件的操作后,再返回第四成员变量(即字符串的大小)。
可以理解的是,本实施例中为了达到提高性能的目的,并没有在构造函数中来读取文件内容到成员变量中,而是在对字符串数据获取接口进行实现时来读取文件内容到成员变量中,并且采用的是延时读取的方式,也就是用的时候才真正的读取。由于读取文件是一个比较慢的IO操作,所以采取使用时才进行读取操作的方法,能有效保障系统性能;与此同时,在读取过程中,还使用了性能更高的内存映射的文件模式,从而进行文件映射而不需要读取文件本身,从而进一步使得性能更快更好,使用效果更加理想。
具体地,作为一种可选的实施方式,步骤S304中,所述字符串数据获取接口采用延时读取的方式进行读取操作,且读取过程中采用内存映射的文件模式,并将文件映射的结果保存至第五成员变量中返回,具体可包括以下操作:
(1)所述字符串数据获取接口判断当前是否已经读取过,若是,则返回第五成员变量;否则,转入步骤(2)进行读取操作。其中,判断当前是否已经读取过时,是依据当前第五成员变量是否为空来进行判断,若第五成员变量为空则表明没有读取过。
(2)读取过程中,通过调用系统函数mmap来映射所要读取的文件,并采用写时复制的私有映射方式;同时,将文件映射的结果保存至第五成员变量中返回。
举例来说,在第二子类中对所述字符串数据获取接口、字符串大小获取接口进行实现,其实现代码可设计如下:
Figure BDA0003101402730000141
Figure BDA0003101402730000151
S305、在第二子类的析构函数中进行资源的释放,即释放上述内存映射文件。可以理解的是,由于之前使用了内存映射文件,为了不造成资源泄露,所以需要在析构函数中进行资源的释放操作。
具体地,可在析构函数中先判断是否有进行过内存映射文件的操作,如果有,则进行释放操作;否则,不需要进行释放操作。进行释放操作时,同样通过调用系统函数munmap来进行资源的释放;同时,还需进行文件句柄的关闭。
举例来说,在第二子类的析构函数中进行资源的释放,其代码设计可如下:
Figure BDA0003101402730000152
更进一步地,由于第二子类是从文件句柄来构造,因此为了方便使用者(调用者),则可以创建一个预设的接口函数来实现通过传入文件的名称来构造字符串对象的方法。而在构造对象时,该对象只能存储在一个地方,同时其不能进行拷贝,那么则可通过使用智能指针来进行存储。为此,作为一种优选的实施方式,步骤S3还包括以下操作:
创建一个预设的接口函数,用于实现通过传入文件名称来构造字符串对象的方法;该预设的接口函数为一个静态函数,且入参为文件名称,当该函数被调用时将通过调用系统函数open来获取文件句柄,获取到文件句柄后通过调用上述步骤S303中创建的构造函数来构造字符串对象,并使用智能指针来进行存储并返回。
举例来说,所创建的上述接口函数的具体代码可设计如下:
Figure BDA0003101402730000161
S4、当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。举例来说,若当前需要从文件名称为file1的文件中读取字符串,并使用其中的字符串进行加密或者解密等操作。那么,在实际应用时,则可基于该文件名来选择对应的第二子类来构造字符串对象并使用。具体来说,可直接调用上述步骤S3中所创建的预设的接口函数,如static std::unique_ptr<const FileString>fromPath(const std::string&name),并将文件名称file1作为入参传入;此时,该接口函数将通过调用系统函数open来获取文件句柄fd,获取到文件句柄后通过调用上述步骤S303中创建的构造函数来构造字符串对象,构造时需要传入两个参数,一个是获取到的文件句柄的参数fd,另一个是文件大小的参数size,并使用智能指针来进行存储并返回;最后,当真正使用其中的字符串进行加密或者解密等操作时,会如步骤S304中所描述的一样,通过对所述字符串数据获取接口、所述字符串大小获取接口进行实现来获取所需字符串的数据以便进行加密或者解密等操作,从而达到一种使用时才进行读取操作的方法,能有效保障系统性能;与此同时,在读取过程中,还使用了性能更高的内存映射的文件模式,从而进行文件映射而不需要读取文件本身,从而进一步使得性能更快更好,使用效果更加理想。
同理,若当前使用者(调用者)传入的参数是字符串大小,那么,在实际应用时,则可基于字符串大小的参数来选择对应的第一子类来构造字符串对象并使用。具体的构造过程可参见上文步骤S2的具体描述,此处不再赘述。但可以理解的是,选择第一子类来构造字符串对象,会通过字符串大小优先将存储字符串的内存空间构造出来,然后通过一个预设好的接口函数来获取创建好的内存空间,从而令使用者(调用者)可通过获取的内存空间来赋值,使用方便、高效。
由上述内容可以看出,本实施例提供了多种字符串的构造方式,包括以字符串大小来构造对象和以读取文件方式来构造对象。因此,使用者可根据不同的参数选择不同的构造方法,构造方式灵活可选,适应性更广,且不同的构造方式具有各自不同的特点,满足了实际应用需求。
总的来说,通过上述步骤S1~S4的操作可以看出,本方案首先会创建用于字符串构造的基类,并在该基类中抽象出字符串构造所需的统一接口,而抽象出的统一接口则会在后续所创建的不同功能的子类(第一子类、第二子类)中进行相应的实现,从而使得使用者(调用者)能够高效快捷地基于各种不同的参数构造出一样的字符串并使用;同时在基类中限制了其拷贝的可能性,使得使用者无法将其进行拷贝,从而提高了程序的性能及安全性;并且,本方案还提供了多种字符串的构造方式,可根据不同的参数选择不同的构造方法,构造方式灵活可选,适应性更广,满足了实际应用需求。
实施例二
基于同一发明构思,如图2所示,本发明第二实施例提供一种安卓平台使用字符串的系统,其包括:
基类创建单元10,其用于创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口;
第一子类创建单元20,其用于创建以字符串大小来构造对象的第一子类,所述第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
第二子类创建单元30,其用于创建以读取文件方式来构造对象的第二子类,所述第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
使用处理单元40,其用于当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。
前述方法实施例中的各种变化方式和具体实例同样适用于本实施例的系统,通过前述方法的详细描述,本领域技术人员可以清楚的知道本实施例中系统的实施方法,所以为了说明书的简洁,在此不再详述。
实施例三
基于同一发明构思,本发明第三实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的一种安卓平台使用字符串的方法,该方法包括:
创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口;
创建以字符串大小来构造对象的第一子类,所述第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
创建以读取文件方式来构造对象的第二子类,所述第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
实施例四
基于同一发明构思,本发明第四实施例还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一实施例中的所有方法步骤或部分方法步骤。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
总体来说,本发明实施例提供的一种安卓平台使用字符串的方法、存储介质、电子设备及系统,不仅能够高效便捷地基于各种不同的参数构造出字符串,而且能有效提高字符串使用时的安全性和性能,满足实际应用需求。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
注意:上述的具体实施例仅是例子而非限制,且本领域技术人员可以根据本发明的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本发明的效果,这种合并和组合而成的实施例也被包括在本发明中,在此不一一描述这种合并和组合。
本发明实施例中提及的优点、优势、效果等仅是示例,而非限制,不能认为这些优点、优势、效果等是本发明的各个实施例必须具备的。另外,本发明实施例公开的上述具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本发明实施例必须采用上述具体的细节来实现。
本发明实施例中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子,并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。本发明实施例所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。本发明实施例所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
本发明实施例中的步骤流程图以及以上方法描述仅作为例示性的例子,并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本领域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。
另外,本发明各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本发明的概念来结合本文中的各个实施例中相关的部分步骤和部分装置,以构思新的实施例,而这些新的实施例也包括在本发明的范围内。
本发明实施例中的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路或处理器。
本发明实施例的方法包括用于实现上述的方法的一个或多个动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。
本领域技术人员可以不脱离由所附权利要求定义的教导的技术而进行对在此所述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上所述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此所述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本发明。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本发明的范围。因此,本发明不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本发明的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。且本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (10)

1.一种安卓平台使用字符串的方法,其特征在于,包括以下步骤:
S1、创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口;
S2、创建以字符串大小来构造对象的第一子类,所述第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
S3、创建以读取文件方式来构造对象的第二子类,所述第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
S4、当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。
2.如权利要求1所述的安卓平台使用字符串的方法,其特征在于,步骤S1中,将其设置为无法进行拷贝的功能,包括以下操作:
将所述基类的拷贝函数和赋值函数设置成delete模式。
3.如权利要求1所述的安卓平台使用字符串的方法,其特征在于,步骤S2,包括以下操作:
定义一个以字符串大小来构造对象的第一子类,并使其继承于所述基类;
在所述第一子类中,创建第一成员变量和第二成员变量;所述第一成员变量用于存储分配的字符串的首地址空间,所述第二成员变量用于记录字符串的内存空间的大小;
在所述第一子类中,创建构造函数并将其设置为:用于将传入的字符串大小的参数赋值给第二成员变量,并调用系统的内存分配方法new来分配字符串空间并存储到第一成员变量中;且分配字符串空间时多分配一个空间用于存储结尾符,并将最后一个字符填充成字符串的结尾符;
在所述第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现,使得所述字符串数据获取接口返回第一成员变量、所述字符串大小获取接口返回第二成员变量;并创建一个预设的接口函数来获取所分配的字符串空间,用于通过获取的字符串空间来进行赋值。
4.如权利要求1所述的安卓平台使用字符串的方法,其特征在于,步骤S3,包括以下操作:
定义一个以读取文件方式来构造对象的第二子类,并使其继承于所述基类;
在所述第二子类中,创建第三成员变量、第四成员变量和第五成员变量;所述第三成员变量用于存储文件句柄,所述第四成员变量用于存储字符串的大小,所述第五成员变量用于存储字符串的内容;
在所述第二子类中,创建构造函数并将其设置为:用于将传入的文件句柄的参数、文件大小的参数分别赋值给第三成员变量、第四成员变量;
在所述第二子类中,对所述字符串数据获取接口进行实现,使得所述字符串数据获取接口采用延时读取的方式进行读取操作,且读取过程中采用内存映射的文件模式,并将文件映射的结果保存至第五成员变量中返回;同时,对所述字符串大小获取接口进行实现,使得所述字符串大小获取接口先调用一次读取文件的操作后,再返回第四成员变量。
5.如权利要求4所述的安卓平台使用字符串的方法,其特征在于,所述字符串数据获取接口采用延时读取的方式进行读取操作,且读取过程中采用内存映射的文件模式,并将文件映射的结果保存至第五成员变量中返回,具体包括以下操作:
所述字符串数据获取接口判断当前是否已经读取过,若是,则返回第五成员变量,否则,进行读取操作;读取过程中,通过调用系统函数mmap来映射所要读取的文件,并采用写时复制的私有映射方式;同时,将文件映射的结果保存至第五成员变量中返回。
6.如权利要求4所述的安卓平台使用字符串的方法,其特征在于,步骤S3还包括以下操作:
创建一个预设的接口函数,用于实现通过传入文件名称来构造字符串对象的方法;
所述预设的接口函数为一个静态函数,且入参为文件名称,当该函数被调用时将通过调用系统函数open来获取文件句柄,获取到文件句柄后通过调用第二子类中创建的构造函数来构造字符串对象,并使用智能指针来进行存储并返回。
7.如权利要求1所述的安卓平台使用字符串的方法,其特征在于,步骤S2和S3中,均还包括以下操作:在各自子类的析构函数中进行资源的释放操作。
8.一种存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至7任一项所述的方法。
9.一种电子设备,包括存储器和处理器,存储器上存储有在所述处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算机程序时实现权利要求1至7任一项所述的方法。
10.一种安卓平台使用字符串的系统,其特征在于,包括:
基类创建单元,其用于创建用于字符串构造的基类,将其设置为无法进行拷贝的功能;并抽象出字符串构造所需的统一接口,所述统一接口包括字符串数据获取接口、字符串大小获取接口;
第一子类创建单元,其用于创建以字符串大小来构造对象的第一子类,所述第一子类继承于所述基类,且通过传入的字符串大小的参数来构造其字符串对象;并在该第一子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
第二子类创建单元,其用于创建以读取文件方式来构造对象的第二子类,所述第二子类继承于所述基类,且通过传入的文件句柄的参数来读取文件内容到构造的字符串对象中;并在该第二子类中,对所述字符串数据获取接口、字符串大小获取接口进行实现;
使用处理单元,其用于当需要使用字符串时,基于不同的参数选择相应的子类构造出字符串对象并使用。
CN202110624127.0A 2021-06-04 2021-06-04 安卓平台使用字符串的方法、存储介质、电子设备及系统 Pending CN113391792A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110624127.0A CN113391792A (zh) 2021-06-04 2021-06-04 安卓平台使用字符串的方法、存储介质、电子设备及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110624127.0A CN113391792A (zh) 2021-06-04 2021-06-04 安卓平台使用字符串的方法、存储介质、电子设备及系统

Publications (1)

Publication Number Publication Date
CN113391792A true CN113391792A (zh) 2021-09-14

Family

ID=77618250

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110624127.0A Pending CN113391792A (zh) 2021-06-04 2021-06-04 安卓平台使用字符串的方法、存储介质、电子设备及系统

Country Status (1)

Country Link
CN (1) CN113391792A (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200641682A (en) * 2005-05-20 2006-12-01 Chunghwa Telecom Co Ltd Dynamic object cloning technique using C++ programming language
US10599487B1 (en) * 2019-06-11 2020-03-24 Noble Systems Corporation Adaptable data source connection strings

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200641682A (en) * 2005-05-20 2006-12-01 Chunghwa Telecom Co Ltd Dynamic object cloning technique using C++ programming language
US10599487B1 (en) * 2019-06-11 2020-03-24 Noble Systems Corporation Adaptable data source connection strings

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
MICHAEL WONG: "《深入理解C++11:C++11新特性解析与应用》", 30 June 2013, 机械工业出版社 *
ROGER: "Lazy File Reading with mmap", 《HTTPS://NEXTMOVESOFTWARE.COM/BLOG/2012/10/17/LAZY-FILE-READING-WITH-MMAP/》 *
则然: "Java StringBuilder和StringBuffer源码分析", 《HTTPS://SEGMENTFAULT.COM/A/1190000004261063》 *

Similar Documents

Publication Publication Date Title
WO2018099292A1 (zh) 一种进程管理方法及装置
CN104156225B (zh) 一种安装包的下载方法、系统及服务器
CN107045438B (zh) 一种应用顶层视图处理方法、装置及组件
CN109062582A (zh) 一种应用安装包的加密方法及装置
CN105094878B (zh) 一种集成系统库文件的方法和装置
CN107402792B (zh) 应用软件安装包的集成方法、装置、设备及存储介质
US20160378447A1 (en) Selecting application wrapper logic components based on features of a mobile application to be wrapped
CN112331235A (zh) 多媒体内容的编辑控制方法、装置、电子设备和存储介质
CN112416359A (zh) 动态分区定制方法、装置、设备和计算机可读存储介质
US20150113506A1 (en) Method and system for adaptive loading of application
CN110602212A (zh) 应用服务管理方法、装置及存储介质
JP6703114B2 (ja) アプリケーションプログラム実行方法及び装置
CN103197950B (zh) 插件虚拟机实现方法
CN113391792A (zh) 安卓平台使用字符串的方法、存储介质、电子设备及系统
CN112612460A (zh) 接口的封装和调用方法、电子设备、及存储介质
US11249760B2 (en) Parameter management between programs
CN109213534A (zh) 一种扩展直播软件功能的方法及装置
CN110018890B (zh) 一种线程间的交互方法、电子设备及可读存储介质
CN113835748B (zh) 基于html5的应用程序的打包方法、系统和可读介质
CN112162793B (zh) 结构化视图业务分离的方法、存储介质、电子设备及系统
CN111045746A (zh) 代码扩展方法和框架
CN114327404A (zh) 一种文件处理方法、装置、电子设备及计算机可读介质
CN114064176A (zh) 一种视图交互方法、装置、电子设备及计算机可读介质
CN109643230B (zh) 用作库包的java卡应用包的方法和设备
CN113709171A (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20210914

RJ01 Rejection of invention patent application after publication