精华内容
下载资源
问答
  • Android 数据持久化(一)之简单数据持久化对于有些数据,关键性的数据,不希望程序关闭或关机的时候,它存在一会儿就消失,就需要用到数据的持久化技术。Android开发中不可避免的使用到这个技术,下面的提到的三种...

    Android 数据持久化(一)之简单数据持久化

    对于有些数据,关键性的数据,不希望程序关闭或关机的时候,它存在一会儿就消失,就需要用到数据的持久化技术。Android开发中不可避免的使用到这个技术,下面的提到的三种方式是比较“古老”的技术,但是我们还是要了解下。

    1.持久化技术简介

    持久化的技术是指将内存中的瞬时数据保存到存储设备中,保证设备关机的状态下数据仍不会丢失。即可以让数据在瞬时状态和持久状态之间进行转换。

    Android系统提供了三种方式:

    1. 文件存储(简单地实现数据持久化功能)

    2. SharePreference存储

    3. 数据库存储

    还可以SD卡中保存,但以上三种保存相对简单,也会比用SD卡保存的安全

    方式

    方法

    使用范围

    存储位置

    文件存储

    openFileInput()

    openFileOutput()

    二进制数据/简单文本

    data/data//files/

    SharedPreferences存储

    Context.getSharedPreferences()

    Activity.getPreferences()

    PreferenceManager.getDefaultSharedPreferences()

    支持多种不同的数据类型

    data/data//shared_prefs/

    SQLite数据库存储

    SQLiteOpenHelper抽象类;

    getReadableDatabase() 和

    getWritableDatabase()实例方法

    关系型数据库

    /data/data//databases/

    2.文件存储

    这是Android中最基本的数据存储方式,不对存储内容进行任何的格式化处理,即原封不动的保存到文件中,适合 :存储简单的文本数据或者二进制数据。

    如果想用来保存较复杂的文本数据就要定义一套自己的格式规范,方便数据的解析。

    Context 类中提供了一个openFileOutput ()方法,可以用于将数据存储到指定的文件中。

    第一个参数,就是文件创建时使用的名称,制定文件名不可以包含路径名,文件默认保存的路径/data/data//files/ 目录下的。

    第二个参数,文件操作模式,MODE_PRIVATE 和MODE_APPEND。

    openFileOutput() 方法返回是一个FileOutputStream对象,得到这个对象后可以使用Java流写入到文件中。

    代码:

    public void save(String inputText) {

    FileOutputStream out = null;

    BufferedWriter writer = null;

    try {

    //开打data文件

    out = openFileOutput("data", Context.MODE_PRIVATE);

    writer = new BufferedWriter(new OutputStreamWriter(out));

    writer.write(inputText);

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    if (writer != null) {

    writer.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    public String load() {

    FileInputStream in = null;

    BufferedReader reader = null;

    StringBuilder content = new StringBuilder();

    try {

    in = openFileInput("data");

    reader = new BufferedReader(new InputStreamReader(in));

    String line = "";

    while ((line = reader.readLine()) != null) {

    content.append(line);

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    if (reader != null) {

    try {

    reader.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    return content.toString();

    }

    3.SharedPreferences存储

    这个SharedPreferences对象是使用键值对的方式来存储数据的。保存的时候,给这需要的数据提供一个对应的键,读取的时候也是通过键。SharePreferences存储支持多种不同的数据类型存储(存储的是整型,读取出来的数据也是整型;存字符串,取的是字符串)。

    三种方法可得到SharePreferences对象

    1. Context类中的getSharedPreferences()方法

    public void contextSharedPre(){

    SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);

    //获取存储的数据 直接pref.getString("name","默认值");

    SharedPreferences.Editor editor = pref.edit();

    editor.putString("name","lily");

    editor.putString("age","20");

    editor.putBoolean("married",false);

    editor.commit();

    }

    2. Activity类中的getPreferences()方法

    public void activitySharedPre(){

    SharedPreferences pref = getPreferences(MODE_PRIVATE);

    SharedPreferences.Editor editor = pref.edit();

    editor.putString("name","lily");

    editor.putString("age","20");

    editor.putBoolean("married",false);

    editor.commit();

    }

    3. PreferenceManager类中的方法getDefaultSharedPreferences()(是一个静态方法)

    这是一个静态方法,它接收一个Context 参数,并自动使用当前应用程序的包名作

    为前缀来命名SharedPreferences 文件。

    得到了SharedPreferences 对象之后,就可以开始向SharedPreferences 文件中存储数据了,

    主要可以分为三步实现。

    3.1 调用SharedPreferences 对象的edit()方法来获取一个SharedPreferences.Editor 对象。

    3.2 向SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用

    putBoolean 方法,添加一个字符串则使用putString()方法,以此类推。

    3.3 调用commit()方法将添加的数据提交,从而完成数据存储操作。

    public void PreManagerSharedPre(){

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);

    SharedPreferences.Editor editor = pref.edit();

    editor.putString("name","lily");

    editor.putString("age","20");

    editor.putBoolean("married",false);

    editor.commit();

    }

    3. SQLite数据库

    SQLiteOpenHelper 类可以简单地对数据库进行创建和升级,这个类有两个抽象方法,分别是onCreate()和onUpgrade()。

    还有两个非常重要的实例方法, getReadableDatabase() 和getWritableDatabase()。两方法都可以创建或打开一个现有的数据库,不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。

    SQLiteOpenHelper有两个构造方法可供重写,其中一个有四个参数 :Context、数据库名、Cursor、当前数据库的版本号。构造SQLiteOpenHelper 的实例之后,再调用它的getReadableDatabase()或getWritableDatabase()方法就能够创建数据库了数据库文件会存放在/data/data//databases/目录下。此时,重写的onCreate()方法也会得到执行,在这里去处理一些创建表的逻辑。

    关于SQLite的查询使用,SQLiteDatabase中提供了一个query()方法用于对数据进行查询。其第一个参数 是要查询数据的表名,第二指定去查询哪一列,三四 用于约束查询某一行或几行的数据,第五参数 用于对group by 之后的数据进一步过滤,第七是查询结果的排序方式。

    0818b9ca8b590ca3270a3433284dd417.png

    query()方法会返回一个Cursor对象,查询的结果从这个对象中取出。

    附件:adb是Android SDK 自带一个调试工具,使用此工具可以直接对连接到电脑上的手机或者模拟器进行调试操作。它存在于sdk的platform-tools目录下,需要将它的路径配置到环境变量里。Windows DOS命令下输入adb shell进入设备控制台,cd /data/data//databases/目录下,输入sqlite3打开数据库。(另外通过su root获得权限)

    展开全文
  • 本地数据持久化方法

    2021-03-04 03:49:14
    数据归档(NSKeyedValueArchiver) 与属性列表相反,同样作为轻量级存储的持久化方案,数据归档是进行加密处理的,数据在经过归档处理会转换成二进制数据,所以安全性要远远高于属性列表。另外使用归档方式,我们可以...

    http://www.jianshu.com/p/86ea6da905cf

    http://www.cocoachina.com/industry/20130328/5908.html

    1. 属性列表(plist)NSUserDefaults

    属性列表是一种明文的轻量级存储方式,其存储格式有多种,最常规格式为XML格式。在我们创建一个新的项目的时候,Xcode会自动生成一个info.plist文件用来存储项目的部分系统设置。plist只能用数组(NSArray)或者字典(NSDictionary)进行读取,由于属性列表本身不加密,所以安全性几乎可以说为零。因为,属性列表正常用于存储少量的并且不重要的数据。

    在程序启动后,系统会自动创建一个NSUserDefaults的单例对象,我们可以获取这个单例来存储少量的数据,它会将输出存储在.plist格式的文件中。其优点是像字典一样的赋值方式方便简单,但缺点是无法存储自定义的数据。

    2. 数据归档(NSKeyedValueArchiver)

    与属性列表相反,同样作为轻量级存储的持久化方案,数据归档是进行加密处理的,数据在经过归档处理会转换成二进制数据,所以安全性要远远高于属性列表。另外使用归档方式,我们可以将复杂的对象写入文件中,并且不管添加多少对象,将对象写入磁盘的方式都是一样的。

    要使用对象归档,对象必须实现NSCoding协议。大部分Objective-C对象都符合NSCoding协议,也可以在自定义对象中实现NSCoding协议。要实现NSCoding协议,要实现两个方法:encodeWithCoder和initWithCoder。

    使用NSKeyedArchiver对自定义的数据进行序列化,并且保存在沙盒目录下。使用这种归档的前提是让存储的数据模型遵守NSCoding协议并且实现其两个协议方法。(当然,如果为了更加安全的存储,也可以遵守NSSecureCoding协议,这是iOS6之后新增的特性)

    3. 数据库(sqlite)

    sqlite是一个轻量级、跨平台的小型数据库,其拥有可移植性高、有着和MySql几乎相同的数据库语句以及无需服务器即可使用的优点:

    一、可以存储大量的数据,存储和检索的速度非常快;

    二、能对数据进行大量的聚合,这样比起使用对象来进行这些操作要快。

    当然,它也具有明显的缺点:

    一、它没有提供数据库的创建方式;

    二、它基于C语言框架设计,没有面向对象的API,所以使用起来比较麻烦;

    三、复杂的数据模型的数据建表相对而言比较麻烦。

    当然,我们也可以使用基于sqlite封装的开源数据库FMDB来减少使用sqlite的工作量。

    SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

    4. coreData

    Core Data本质上是使用SQLite保存数据,但是它不需要编写任何SQL语句。

    要使用Core Data,需要在Xcode中的数据模型编辑器中设计好各个实体以及定义好他们的属性和关系。之后,通过操作这些对象,结合Core Data完成数据的持久化。

    coreData是苹果官方iOS5之后推出的综合型数据库,其使用了ORM(Object Relational Mapping)对象关系映射技术,将对象转换成数据,存储在本地数据库中。coreData为了提高效率,甚至将数据存储在不同的数据库中,且在使用的时候将本地数据放到内存中使得访问速度更快。我们可以选择coreData的数据存储方式,包括sqlite、xml等格式。但也正是coreData 是完全面向对象的,其在执行效率上比不上原生的数据库。除此之外,coreData拥有数据验证、undo等其他功能,在功能上是四种持久化方案最多的。

    展开全文
  • 数据持久化

    千次阅读 2021-11-25 10:04:21
    数据持久化企业数据架构存储技术存储架构 企业数据架构 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中,如磁盘等。 数据按存储类型可以分为缓存数据库、关系型数据库、NoSQL...

    企业数据架构

    企业数据架构
    持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中,如磁盘等。

    数据按存储类型可以分为缓存数据库、关系型数据库、NoSQL数据库、图片和视频等文件的对象存储数据库等。

    其中缓存数据库是应用内存存储数据,其余的存储类型都是持久化的存储。

    1. 联机交易区,即需要进行OLTP(On-line Transaction Processing,联机事务处理)的数据区域,与统计分析区相比,数据为近期产生的,热度较高,数据量相对较小,并发较高,要求实时处理。

    2. 统计分析区,即需要进行OLAP(On-line Analytical Processing,联机分析处理)的数据区域,单个数据的查询频率较OLTP更低,但数据量大,通常会涉及较复杂的聚合计算。

    联机交易区和统计分析区之间使用ETL工具如Kattle或其他数据复制技术来实现数据的导入。

    存储技术

    RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,通常简称为磁盘阵列。

    RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,能提供比单个磁盘更高的存储性能和数据冗余的技术。当单块磁盘出现故障时,RAID会根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在RAID中的多个磁盘上,并发数据读写要大大优于单个磁盘,因此可以获得更高的聚合I/O带宽。磁盘阵列会减少全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。

    RAID中主要有三个关键概念和技术
    1)镜像(Mirroring)

    镜像是将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。镜像的写性能要稍低,确保数据正确地写到多个磁盘需要消耗更多的时间。

    2)数据条带(DataStripping)

    数据条带是将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上的数据进行读写操作,从而获得非常可观的I/O性能提升。

    2)数据校验(Data Parity)

    数据校验是利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以在很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。

    通过组合运用这三种技术,可以把RAID分为不同的等级,以满足不同数据应用的需求。实际应用领域中使用最多的RAID等级是RAID0、RAID1、RAID3、RAID5、RAID6和RAID10。

    (1)RAID0

    RAID0将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并发读访问。由于可以并发执行I/O操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0的性能在所有RAID等级中是最高的。

    RAID0具有低成本、高读写性能、100%的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。因此,RAID0一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。

    (2)RAID1

    RAID1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50%。RAID1在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。RAID1提供了最佳的数据保护,一旦工作磁盘发生故障,系统会自动从镜像磁盘读取数据,不会影响用户工作。

    RAID1与RAID0刚好相反,是为了增强数据安全性而使两块磁盘数据呈现完全镜像。RAID1拥有完全容错的能力,但实现成本高。RAID1应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。

    (3)RAID3

    RAID3采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘。RAID3完好时读性能与RAID0完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力。向RAID3写入数据时,必须计算所有同条带的校验值,性能较低。

    RAID3只需要一个校验盘,阵列的存储空间利用率高,再加上并行访问的特征,能够为高带宽的大量读写提供高性能,适用于大容量数据的顺序访问应用,如影像处理、流媒体服务等。目前,RAID5算法不断改进,在大数据量读取时能够模拟RAID3,而且RAID3在出现坏盘时性能会大幅下降,因此常使用RAID5替代RAID3来运行具有持续性、高带宽、大量读写特征的应用。

    (4)RAID5

    RAID5和RAID3类似,但校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。

    RAID5技术实际上没有备份磁盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID5这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。是目前综合性能最佳的数据保护解决方案。RAID5基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。

    (5)RAID6

    RAID6引入双重校验的概念,可以保证阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。RAID6思想最常见的实现方式是采用两个独立的校验算法,假设称为P和Q,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解二元方程来重建两个磁盘上的数据。RAID6具有快速的读取性能、更高的容错能力。但是,它的成本要高出RAID5许多,写性能也较差,并且设计和实施非常复杂。因此,RAID6很少得到实际应用,主要用于对数据安全等级要求非常高的场合。

    (6)RAID10

    RAID10也称为RAID1+0,实际是将RAID1和RAID0标准结合的产物。RAID10技术需要至少4块硬盘来组建,先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1按阵列实施RAID0技术。RAID10方案造成了50%的磁盘浪费,但是它提供了200%的速度和防止单磁盘损坏的数据安全性。

    存储架构

    存储架构

    扇区是磁盘的最小存储单位,多个连续的扇区组成一个块,也叫物理块。

    文件由多个不连续的物理块组成,文件系统使用块来读取设备,块是文件系统的最小单位。使用块存储信息的设备叫作块设备,块设备是I/O设备中的一类,每个块都有自己的地址。

    文件系统是操作系统在存储设备上组织文件的方法,是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。

    1. DAS(Direct-attached Storage)

    直连存储存储通过SAS、iSCSI或FC等接口与服务器直接连接,中间没有任何转换交换设备,作为服务器内置硬盘容量的扩充,具有一定的灵活性和限制性。RAID通常在服务器端进行设置,通常将单一存储与服务器直连也称为DAS。

    1. NAS(Network Attached Storage)

    网络附加存储存储设备通过标准的网络拓扑结构(以太网)添加到一群计算机上,可以理解为服务器+硬盘+文件系统软件的组合。存储可配置网络IP地址,直接接入IP局域网络,RAID在存储器端进行设置并配置文件共享功能。NAS利用现有以太网网络,因此部署灵活,成本非常低,基于TCP/IP协议的特性可以提供丰富的网络服务,基于文件的形式提供数据的存储及备份,但是TCP/IP协议决定了数据传输的数据打包及解包,会占用系统资源,传输速率受限于以太网的速率。

    在存储功能上面有一个文件系统,NAS是文件存储,聚焦在应用、用户和文件以及它们共享的数据上,NAS通过网络共享协议使用一个文件系统,应用服务器和NAS之间使用的协议有SMB、NFS以及AFS等网络文件系统协议。对于应用服务器来说,NAS就是一个网络上的文件服务器,可以上传、下载文件。

    1. SAN(Storage Area Network)存储区域网络

    SAN通过光纤通道交换机连接存储阵列和服务器主机,成为一个专用存储网络。RAID在存储器端进行设置。SAN的结构允许任何服务器连接到任何存储阵列,这样不管数据放在哪里,服务器都可直接存取所需的数据。

    SAN存储使用光纤网络进行传输,并且独立于应用网络,可以提供非常高的带宽,数据的传输基于块协议,无需对数据进行处理,直接进行传送,因此性能最好。另外光纤线路可以提供远距离的高带宽链路,可以实现数据中心的异地灾备应用。但是SAN部署复杂,成本较高。NAS和SAN又叫网络存储,都是使用RAID技术提供冗余和并发读写,两者最本质的区别在于文件管理系统位置。在SAN存储架构中,文件系统是部署在每个应用服务器上,SAN是块存储,聚焦在磁盘、磁带以及连接它们的基础结构,而把文件系统的抽象交由应用服务器负责。

    SAN的客户端和服务器端之间的协议有Fibre Channel、iSCSI、ATA overEthernet(AoE)和HyperSCSI。对于应用服务器来说,SAN就是一块磁盘,可以对其格式化、创建文件系统并挂载。

    1. OSS(Object Storage Service)对象存储

    传统的网络存储价格较贵,扩展数量有限,互联网生态下的云存储则用数量弥补质量,以大量低成本的普通PC服务器组成网络集群来提供服务。相比传统的高端服务器,同样价格下分布式存储提供的服务更好、性价比更高,且新节点的扩展以及坏旧节点的替换更为方便。

    对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠性的云存储技术,适合存放任意类型的文件。对象和存储空间是对象存储的核心概念,围绕对象和存储空间需要建立访问控制、数据管理、数据加密、容灾备份机制。

    (1)对象存储的概念

    对象是OSS存储数据的基本单元,也称为OSS的文件。对象由元信息(ObjectMeta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键-值对,表示了对象的一些属性,如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。其中地域表示OSS的数据中心所在物理位置,一般来说,距离用户更近的地域访问速度更快。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。每个用户可以拥有多个存储空间。存储空间的名称在OSS范围内必须是全局唯一的,一旦创建就无法修改名称。存储空间内部的对象数目没有限制。

    (2)对象存储的实现机制

    OSS,依赖于文件系统提供了从“对象”到“块”的映射,采用key-value的扁平化存储架构设计,调用API就能进行数据存储和读取。对象存储最常用的方案就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外配置几台服务器作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。

    数据冗余存储机制,OSS将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上。OSS周期性地通过校验等方式验证数据的完整性,及时发现因硬件失效等原因造成的数据损坏。当检测到数据有部分损坏或丢失时,会利用冗余的数据进行重建并修复损坏数据,确保硬件失效时的数据可靠性和可用性。

    (3)OSS与传统存储的区别

    与传统存储相比,OSS使用方便,价格低,扩展方便,可以存储海量数据。网络文件系统的客户端通过NFS等网络协议访问某个远程服务器上存储的文件。块存储的客户端通过数据块的地址访问SAN上的数据块。对象存储则通过REST网络服务访问对象。对象存储提升了存储系统的扩展性。当一个存储系统中保存的数据越来越多时,存储系统也需要同步扩展,然而由于存储架构的硬性限制,传统网络存储系统的管理开销会呈指数上升。而对象存储架构的扩展只需要添加新的存储节点就可以。它解决了存储海量大数据的问题。

    (4)对象存储的开源实现

    对象存储的实现方案包括Swift、Ceph、Minio、HBase MOB、Hadoop Ozone等。

    展开全文
  • 提示:这里可以添加...例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、panda.

    unity3d开发对Txt文件的读写

    1.引入库

    本地的txt文件的读取,需要引入System.IO

    using System.IO;
    

    2.读入数据

    从StreamingAsset文件夹读取数据

    public static string ReadFileFromStreamingAsset(string File_Name)
        {
            string File_Path;
            if (Application.platform == RuntimePlatform.Android)
                File_Path = "jar:file://" + Application.dataPath + "!/assets/" + File_Name;
            else
                File_Path = Application.dataPath + "/StreamingAssets/" + File_Name;
            WWW www = new WWW(File_Path);
            while (!www.isDone) { }
            if (www.error == null) return www.text;
            else return www.error;
        }
    

    这里需要注意的是平台不同,读取文件的路径需要做区分

    从PersistentDataPath读取数据,需要先从StreamingAssets中拷贝一份

    public static void CopyFileFromStreamingAsset(string File_Name)
        {
            string From_Path;
            if (Application.platform == RuntimePlatform.Android)
                From_Path = "jar:file://" + Application.dataPath + "!/assets/" + File_Name;
            else
                From_Path = Application.dataPath + "/StreamingAssets/" + File_Name;
            string To_Path = Application.persistentDataPath + "/" + File_Name;
            WWW www = new WWW(From_Path);
            while (!www.isDone) { }
            if (www.error == null)
            	File.WriteAllBytes(To_Path, www.bytes);
            
        }
    public static string[] ReadFileLines(string file_name)//读取
        {
            string path = Application.persistentDataPath + "/" + file_name;
            if (!File.Exists(path))  { CopyFileFromStreamingAsset(file_name); };
            return File.ReadAllLines(path);
        }
    

    3.写入数据

    游戏中产生的变更文件或游戏中生成的新文件存入PersistentDataPath

    public static void CreateFileToPersistenDataPath(string File_Name, string Str_info)
        {
            StreamWriter sw;
            FileInfo t = new FileInfo(Application.persistentDataPath + "/" + File_Name);
            if (!t.Exists)
            {
                sw = t.CreateText();
            }
            else
            {
                t.Delete();
                t.Refresh();
                sw = t.AppendText();
            }
            sw.Write(Str_info);
            sw.Dispose();
            sw.Close();
            
        }
    

    展开全文
  • 大数据 | HDFS 元数据持久化笔记

    千次阅读 2021-11-29 18:44:58
    四、HDFS 元数据持久化 五、Secondary NameNode 的引入 六、总结 一、HDFS 架构简单介绍 HDFS 是一个主从(Master/Slaves)的架构,它由一个 NameNode 和一些 DataNode 组成。其中,NameNode 是主,...
  • 文件存储技术-数据持久化-Android

    多人点赞 热门讨论 2021-11-04 09:19:01
    数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机的情况下,这些数据仍然不会丢失。 保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的。持久...
  • 8月18日的LinuxCon 与 ContainerCon大会中,来自Docker的Jerome ...Jerome加入Docker之前,在VOIP,嵌入式系统,虚拟主机,虚拟和云计算等多个技术领域都有过工作经验。在大会前夕,Jerome接受了Ashnik CTO ...
  • 需求:数据可以持久化 MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地! 容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地! 这就是卷技术!目录的挂载,将我们容器内的目录...
  • 消息接收+数据持久化:ActiveMQ+MQTT+MySQL 业务需求: 服务器能实时更新设备参数和加载最新数据 服务器能将从ActiveMQ的数据持久化到本地的数据库 具体实现 数据库连接——C3P0数据库连接池 数据库连接池负责分配...
  • 对数据库服务里的数据进行持久化存储,既可以做数据备份,也方面数据传输。目前主要有两种实现方式:一.创建快照Mysql快照Mysql的dump工具,可以将数据导出为.sql文件,通过这个sql文件,可以作数据恢复。$ ...
  • 作者 | 竞霄 阿里巴巴开发工程师 本文整理自《Serverless 技术公开课》*导读:本节课程有三部分内容,分别介绍在 SAE 上查看应用的实时日志,文件日志以及通过 NAS 进行应用数据持久化存储。实时日志 首先,SAE ...
  • Java对象持久化技术(1)

    2021-03-01 07:05:31
    持久化是将Java虚拟机对象持久保存,而不是将数据库映射为对象,通常数据的存储是用数据库实现的;当然,如果你有更好的存储系统,也可以映射到系统中的存储设备中,这可能需要你自行开发持久化框架来进行持久化一个...
  • 展开全部数据持久化就是将内32313133353236313431303231363533e4b893e5b19e31333431356133存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储...
  • **答:这和镜像存储核心技术有关(联合文件系统unionfs有关),所有写的数据都是放在容器层,本身这个容器层没有想着持久化。 了解联合文件系统后,我们知道,镜像是制度的,类似共享形式让多个容器使用,如果要在...
  • 数据持久化与ORM

    2021-05-14 16:10:31
    什么是数据持久化? 数据持久化就是将内存中的数据模型转换为存储...ORM是一种数据持久化技术。它在对象模型与关系型数据库之间建立起对应的关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。 ...
  • MySQL 持久化保障机制

    2021-01-19 22:02:25
    我们在 聊一聊 MySQL 中的事务及其实现原理 中提到了 redo 日志,redo 日志是用来保证 MySQL 持久化功能的,需要注意的是 redo 日志是 InnoDB 引擎特有的功能。为什么 InnoDB 引擎会引入 redo 日志作为中间层来保证 ...
  • 执行属性的默认初始 //3.执行构造方法 //4.将创建的对象的内存地址赋值给jedisPool变量 //假如使用了volatile修饰jedisPool变量,可以保证如上几个步骤是顺序执行的 } } } return jedisPool.getResource(); } ...
  • Redis数据持久化

    2021-08-07 01:30:43
    一、数据持久化的概述 Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失,需要定期将Redis中的数据以某种形式(或命数据令)从内存保存到硬盘;当下次Redis...
  • Kotlin开发第六天,数据存储,持久化

    千次阅读 2021-11-11 09:30:57
    完整代码Gitee地址:kotlin-demo: 15天Kotlin学习计划 第六天学习内容代码:Chapter6 ...任何一个应用程序,其实说白了就是在不停地和数据打交道,没有数据的应用程序就变成了一个空壳子,对用...
  • 在说redis持久化的时候,我们先来聊聊其他的知识。linux的父子进程。在Linux中使用fork()函数会给当前正在运行的进程创建一个子进程。那么现在问题就来了,fork时父子进程中的数据有什么关系呢?一般说到进程我们...
  • Java EE数据持久化框架 • 【第1章 MyBatis入门】

    万次阅读 多人点赞 2021-04-15 20:07:36
    1.1.1 持久化技术介绍 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。 狭义的讲就是将内存中的数据存储到数据库或其他介质的过程。 Dao层将数据存储到数据库...
  • 页面刷新后,想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和localStorage中。但是用了vue后,vuex便可以被应用了。vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在...
  • 基本区别:InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响...InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需...
  • EMQ 提供了通俗易懂的技术文章及简单易用的客户端工具,帮助开发者学习 MQTT 协议并快速入门 MQTT 客户端编程。https://www.emqx.com/zh/mqtt EMQ X 安装包下载官网(本文下载的是windows版本)如下,包括对应各种系统...
  • Redis持久化技术

    2021-01-18 16:22:07
    redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。 2. redis持久化机制 1. RDB:默认方式,不需要进行配置,默认就使用这种机制 * 在...
  • 所以为了保证数据不丢失,我们需要将内存中的数据存储在磁盘当中,以便Redis在重启之后可以冲磁盘当中回复原来的数据,而整个过程就叫做Redis的持久化。 1.持久化的几种方式 Redis的持久化有3种方式 快照方式(RDB...
  • 对于大部分安卓或者IOS开发人员来说,App的数据持久化可能是很平常的一个话题。但是对于Web开发人员来说,可能紧紧意味着localStorage和sessionStorage。Web开发localStorage和sessionStoragelocalStorage和...
  • 因为要保证高可靠,那么数据就必须持久化到磁盘上,将数据持久化到磁盘,那么可能就不能保证高性能了。RocketMQ 在兼容这两方面做的不错,先从磁盘说起,「现代的磁盘都是高性能的,写速度并不一定比网络的数据传输...
  • 原标题:容器持久化存储必要性及解决方案比较容器的特性决定了容器本身是非持久化的,容器被删除,其上的数据也一并删除。而其上承载的应用分为有状态和无状态。容器更倾向于无状态化应用,可水平扩展的,但并不意味...
  • 的文章,文中比较了四种流行的持久化框架:CMP Entity EJBs、JPA、Hibernate和TopLink.Acharya讨论了每种技术并在一个表格中总结了他的结论,其结论归结为:JPA适合J2SE和J2EE的简单框架,并入了其他框架...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 253,969
精华内容 101,587
关键字:

数据持久化技术