当前位置: 首页 > news >正文

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

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

本文包括但不限于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个字节 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • stdin getc() getchar()
  • js逆向--绕过debugger(一)
  • 欢迎大家评论讨论set_input_transition对path delay的影响
  • HarmonyOS开发实战( Beta5版)Stack组件实现滚动吸顶效果实现案例
  • 前端登录鉴权——以若依Ruoyi前后端分离项目为例解读
  • 单点登录SSO
  • 大模型推理框架 RTP-LLM 架构解析
  • 《LeetCode 热题 100》
  • 人机环境系统智能与Petri网
  • kubeadm方式升级k8s集群
  • SprinBoot+Vue校园活动报名微信小程序的设计与实现
  • Android的Launch
  • 读懂以太坊源码(3)-详细解析genesis.json
  • 深度学习5从0到1理解RNN(包括LTSM,GRU等):内容丰富(上)
  • Linux-目录结构和Vim编辑器
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [译] React v16.8: 含有Hooks的版本
  • JavaScript HTML DOM
  • Mithril.js 入门介绍
  • nfs客户端进程变D,延伸linux的lock
  • SpingCloudBus整合RabbitMQ
  • springboot_database项目介绍
  • Terraform入门 - 3. 变更基础设施
  • Webpack 4x 之路 ( 四 )
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 码农张的Bug人生 - 初来乍到
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用parted解决大于2T的磁盘分区
  • 收藏好这篇,别再只说“数据劫持”了
  • 手机端车牌号码键盘的vue组件
  • 微信小程序填坑清单
  • 优秀架构师必须掌握的架构思维
  • 追踪解析 FutureTask 源码
  • 自定义函数
  • HanLP分词命名实体提取详解
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​520就是要宠粉,你的心头书我买单
  • # Redis 入门到精通(九)-- 主从复制(1)
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #AngularJS#$sce.trustAsResourceUrl
  • #Z2294. 打印树的直径
  • (2)MFC+openGL单文档框架glFrame
  • (二十四)Flask之flask-session组件
  • (区间dp) (经典例题) 石子合并
  • (循环依赖问题)学习spring的第九天
  • *** 2003
  • .Net CF下精确的计时器
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Core引入性能分析引导优化
  • .NET WPF 抖动动画
  • .net 微服务 服务保护 自动重试 Polly
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net生成的类,跨工程调用显示注释
  • .net专家(张羿专栏)
  • .Net转Java自学之路—基础巩固篇十三(集合)