Unity数据持久化 之 向文件流读写(详细Plus版)

news2024/9/24 7:23:38

本文仅作笔记学习和分享,不用做任何商业用途

本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​

 在 Unity 手册中,FileStream 并没有单独的详细介绍,因为它是 .NET 框架的一部分,而不是 Unity 特有的类

Unity - Manual: Streaming Assets (unity3d.com) 

前置知识:
Unity数据持久化 之 二进制存储法-CSDN博客,你必须要知道如何将常用数据转为byte和转回来,知道字符串是通过特殊的Encoding方法转为byte的

1.什么是文件流

        文件流文件流,可以理解为将文件中的数据以流水一样的方式(有序地)通过一个通道去传输

        在定义上是指在计算机中用于处理文件输入和输出操作的一种数据流。它可以将数据从一个地方传输到另一个地方,例如从内存写入到硬盘文件,或者从硬盘文件读取到内存。文件流通常分为两种类型:字节流和字符流

        在unity中,filestream属于字节流

2.基本方法(引用注意)

2.1打开或创建文件

该笔记来源于唐老狮

 2.2重要方法

一个重要的使用方法

4

3.写入与读取

我将进行如下示范,请先有个大概的认识,代码看完之后再看这张图会很清晰

4.向文件流中写入字节

写入字节可以按如下步骤:

 public void WriteBytes()
 {
     //首先在Asset下创建一个文件流,叫做Mydata,格式为json
     //之后试着向其中写入520这个数字,并尝试写入字符串三个字 
     using (FileStream fs = File.Open(Application.dataPath + "/Mydata.json", FileMode.OpenOrCreate))
     {
         //先将520转为字节
         byte[] bytes = BitConverter.GetBytes(520);
         //然后写入文件之中
         fs.Write(bytes, 0, bytes.Length);

         //为了方便,字符串则应先写入字符串长度,知道指定内容后,再写入字符串
         byte[] contentBytes = Encoding.UTF8.GetBytes("字符串");
         byte[] lengthBytes = BitConverter.GetBytes(contentBytes.Length);
         //写入字符串长度 和 写入字符串
         fs.Write(lengthBytes, 0, lengthBytes.Length);
         fs.Write(contentBytes, 0, contentBytes.Length);
     }
 }

5.读取文件流中的字节

读取一般数据可以如下操作:

 

 //首先需要打开需要读取的文件
 using (FileStream fs = File.Open(Application.dataPath + "/Mydata.json", FileMode.Open))
 {
     //先试着将520读取出来
     byte[] readbytes = new byte[4];
     int index = fs.Read(readbytes,0, readbytes.Length);//查看一下返回值
     int number = BitConverter.ToInt32(readbytes,0);
     Debug.Log($"数字{number},索引到了{index}这个位置");


     //再试着将字符串读取出来

 }

            //再试着将字符串读取出来
            //先读取字符串长度
            byte[] readLengthbytes = new byte[4];
            fs.Read(readLengthbytes,0, readLengthbytes.Length);
            int contentLength = BitConverter.ToInt32(readLengthbytes, 0);
            Debug.Log("读取到的字符串长度为"+contentLength);

            //根据长度声明容器,再读取字符串内容
            byte[] contentBytes = new byte[contentLength];
            int index1 = fs.Read(contentBytes, 0, contentBytes.Length);
            string content = Encoding.UTF8.GetString(contentBytes);
           
            Debug.Log($"读到的字符串内容为 {content},索引到了{index1}这个位置");

在UTP-8中,一个中文字符串占3个字节 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

已经存在的项目如何变成git的一个repository

已经存在的项目如何被git管理 背景: 有一套代码很敏感,可能动不动就要不能正常工作(硬件开发常事),那改动一下下就要有个记录,就决定用git管理 已经有了服务里里docker里运行的gitbucket,已经有了开发用的电脑上的git客户端&…

c++ websocket简单讲解

只做简单讲解。 一.定义和原理 WebSocket 是从 HTML5 开始⽀持的⼀种⽹⻚端和服务端保持⻓连接的消息推送机制,传统的 web 程序都是属于 "⼀问⼀答" 的形式,即客⼾端给服务器发送了⼀个 HTTP 请求,服务器给客⼾端返回⼀个 HTTP 响…

亿发进销存一体化解决方案:多终端无缝协同,赋能企业全业务-上

亿发软件凭借对产品、市场、业务的深入理解,在进销存基础上进行了延伸,推出多终端、一体化的“进销存管理系统”多元产品矩阵。在技术上实现电脑端、手机端、PDA端、零售端、商家版以及小程序商城的多终端无缝对接。各个端口间的数据可以互通互联&#x…

Prometheus Blackbox监控网站

Blackbox Exporter简介 blackbox_exporter 是 Prometheus 拿来对 http/https、tcp、icmp、dns、进行的黑盒监控工具,也就是从服务、主机等外部进行探测,来查看服务、主机等是否可用。 Blackbox Exporter 默认端口是 9115, 安装1 wget htt…

模电-三极管2

学习资料: 12-放大电路的分析方法_4K_哔哩哔哩_bilibili 如何向老奶奶解释数据库 如何向幼儿解释能量守恒 内容有误,无法保证一定正确,请各自深入学习 大学的知识连贯性很强,没有前面的基础,无法对后面的知识进行&a…

2023 ICPC 江西省赛K. Split

K. Split time limit per test: 3 seconds memory limit per test: 512 megabytes You are given a positive integer n and a non-increasing sequence ai of length n , satisfying ∀i∈[1,n−1],. Then, you are given a positive integer m, which represents the tot…

新版英语教材变化,强调应用与素养并重

随着新学期的到来,2024年新版义务教育英语教材正式在全国范围内投入使用,这一变化不仅在教育界引起了广泛关注,也触动了无数家长的心弦。新版教材在内容、难度及教学理念上的全面升级,既为孩子们提供了更广阔的学习空间&#xff0…

STM32智能家居语音系统

简介 基于STM32构建的智能家居语音控制系统,采用ESP8266(01s)作为关键的WiFi模块。这一系统通过机智云开发平台实现与ESP8266的高效通信,遵循平台规范的协议,确保数据的可靠传输。系统支持WIFI_AIRLINK_MODE&#xff0…

免邀请码下载时代已来临,Xinstall为您保驾护航

在App推广的道路上,邀请码下载一直是一个让人头疼的问题。用户需要输入繁琐的邀请码才能完成下载,这不仅增加了用户的操作难度,也影响了App的推广效果。然而,随着Xinstall的免邀请码下载功能的推出,这一问题终于得到了…

VISION TRANSFORMER ADAPTER FORDENSE PREDICTIONS

总结 提出了一种新范式: 开发了 Vision Transformer Adapter (ViT-Adapter),通过引入无预训练的适配器将视觉特定的归纳偏差(例如局部空间信息)引入普通 ViT,适应密集预测任务。 保留 ViT 灵活性: 与设计…

Linux日志-lastlog日志

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux 系统中的日志是记录系统活动和事件的重要工具,它们可以帮助管理员监视系统状态、调查问题以及了解系统运行…

【动态规划专栏】专题一总结

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

电脑错误mfc140.dll丢失怎么办?mfc140.dll丢失如何修复?

在使用基于Microsoft Visual Studio 2015开发的应用程序时,可能会遇到个别组件影响整体功能的情况,其中“mfc140.dll丢失”错误就是常见的一个技术障碍。这个DLL文件属于Microsoft Foundation Class (MFC) Library,它对Windows应用程序的运行…

基于vue框架的朝阳保险公司营销管理系统0wamc(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,保险信息,保险类型,订单信息,赔偿信息,联系我们,购买指南,到期提醒 开题报告内容 基于Vue框架的朝阳保险公司营销管理系统的开题报告 一、研究背景 随着保险行业的快速发展和市场竞争的日益激烈,传统的管理模式已难以…

恶意代码分析 | Lab1

前言 穿插virus分析的学习,毕竟逆向技术最后要用在攻防中。 Lab1就没必要动态分析了,静态学学写法。 Lab01-01.exe 前面是内存映射技术,对内存进行修改操作。 将Kernel32.dll和Lab01-01.dll的内存都Map出来,便于后续更改&…

有没有性价比高一些的开放式耳机推荐?盘点四款高性价比蓝牙耳机

在正式介绍几款高性价比产品,先来和各位聊聊什么是开放式耳机。开放式耳机是目前比较流行的耳机种类,其特点是通过采用海绵状的微孔发泡塑料制作透声耳垫,不堵塞耳道,使得声音可以泄露,同时佩戴者也能听到外界声音 。 …

民宿酒店预订系统V1.0.8

多门店民宿酒店预订管理系统,快速部署属于自己民宿酒店的预订小程序,包含预订、退房、WIFI连接、吐槽、周边信息等功能。提供全部无加密源代码,支持私有化部署。 V1.0.8修复房间预订状态无法筛选的问题 修复房间预订状态无法筛选的问题 修复…

为自闭症儿童提供全方位支持的自闭症全托管机构

在自闭症儿童的世界里,每一个细微的进步都凝聚着家庭与社会的无尽努力与期盼。星启帆自闭症儿童康复机构,作为一所致力于为自闭症儿童提供全方位支持的全托管机构,正以其专业的服务、温馨的环境和全面的康复计划,成为众多家庭信赖…

UE4_后期处理_后期处理材质及后期处理体积二

效果: 步骤: 1、创建后期处理材质,并设置参数。 2、回到主界面,找到需要发光的物体的细节面板。 渲染自定义深度通道,默认自定义深度模具值为10(需要修改此值,此值影响物体的亮度)。 3、添加…

pytest压力测试:不断发送数据,直到发现数据丢失

示例场景 假设有一个 send_data 函数接受数据并返回成功或失败的状态。 创建一个测试用例,通过逐步增加数据量来测试这个函数,直到返回失败为止。 步骤 定义压力测试函数 定义一个函数。不断发送数据,直到发现数据丢失。 创建 pytest 测试…