2022-10-26 Unity 2进制2——文件流操作

这篇具有很好参考价值的文章主要介绍了2022-10-26 Unity 2进制2——文件流操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、文件流

​ 在 C# 中提供了一个文件流类 FileStream 类,它主要作用是用于读写文件的细节

​ 我们之前学过的 File 只能整体读写文件,而 FileStream 可以以读写字节的形式处理文件

​ 我们可以通过 FileStream 一部分一部分的读写数据流

​ 比如我可以先存一个 int(4 个字节)再存一个 bool(1 个字节)再存一个 string(n 个字节),利用 FileStream 可以以流式逐个读写

  • 类名:FileStream
  • 需要引用命名空间:System.IO
二、打开或创建指定文件

(一)new FileStream

  • 参数一:路径
  • 参数二:打开模式
    • CreateNew:创建新文件 如果文件存在 则报错
    • Create:创建文件,如果文件存在 则覆盖
    • Open:打开文件,如果文件不存在 报错
    • OpenOrCreate:打开或者创建文件根据实际情况操作
    • Append:若存在文件,则打开并查找文件尾,或者创建一个新文件
    • Truncate:打开并清空文件内容
  • 参数三:访问模式
  • 参数四:共享权限
    • None:谢绝共享
    • Read:允许别的程序读取当前文件
    • Write:允许别的程序写入该文件
    • ReadWrite:允许别的程序读写该文件
FileStream fs = new FileStream(Application.dataPath + "/Lesson3.tang", FileMode.Create, FileAccess.ReadWrite);

(二)File.Create

  • 参数一:路径
  • 参数二:缓存大小
  • 参数三:描述如何创建或覆盖该文件(不常用)
    • Asynchronous:可用于异步读写
    • DeleteOnClose:不在使用时,自动删除
    • Encrypted:加密
    • None:不应用其它选项
    • RandomAccess:随机访问文件
    • SequentialScan:从头到尾顺序访问文件
    • WriteThrough:通过中间缓存直接写入磁盘
FileStream fs2 = File.Create(Application.dataPath + "/Lesson3.tang");

(三)File.Open

  • 参数一:路径
  • 参数二:打开模式
FileStream fs3 = File.Open(Application.dataPath + "/Lesson3.tang", FileMode.Open);
三、重要属性和方法
FileStream fs = File.Open(Application.dataPath + "Lesson3.tang", FileMode.OpenOrCreate);

// 文本字节长度
print(fs.Length);

// 是否可读
if(fs.CanRead) { }

// 是否可写
if(fs.CanWrite) { }

// 将字节写入文件 当写入后 一定执行一次
fs.Flush();

// 关闭流 当文件读写完毕后 一定执行
fs.Close();

// 缓存资源销毁回收
fs.Dispose();
四、读写字节

(一)写入字节

FileStream fs = new FileStream(Application.persistentDataPath + "/Lesson3.tang", FileMode.OpenOrCreate, FileAccess.Write);

byte[] bytes = BitConverter.GetBytes(999);

// 方法:Write
// 参数一:写入的字节数组
// 参数二:数组中的开始索引
// 参数三:写入多少个字节
fs.Write(bytes, 0, bytes.Length);

// 写入字符串时
bytes = Encoding.UTF8.GetBytes("唐老狮哈哈哈哈");

// 先写入长度
fs.Write(BitConverter.GetBytes(bytes.Length), 0, 4);
// 再写入字符串具体内容
fs.Write(bytes, 0, bytes.Length);

// 避免数据丢失 一定写入后要执行的方法
fs.Flush();
// 销毁缓存 释放资源
fs.Dispose();

(二)读取字节

  1. 方法一:挨个读取字节
FileStream fs2 = File.Open(Application.persistentDataPath + "/Lesson3.tang", FileMode.Open, FileAccess.Read);

// 读取第一个整型
byte[] bytes2 = new byte[4];

// 参数一:用于存储读取的字节数组的容器
// 参数二:容器中开始的位置
// 参数三:读取多少个字节装入容器
// 返回值:当前流索引前进了几个位置
int index = fs2.Read(bytes2, 0, 4);
int i     = BitConverter.ToInt32(bytes2, 0);

print("取出来的第一个整数" + i); // 999
print("索引向前移动" + index + "个位置");

// 读取第二个字符串
// 读取字符串字节数组长度
index = fs2.Read(bytes2, 0, 4);
print("索引向前移动" + index + "个位置");

int length = BitConverter.ToInt32(bytes2, 0);

// 要根据我们存储的字符串字节数组的长度 来声明一个新的字节数组 用来装载读取出来的数据
bytes2 = new byte[length];
index  = fs2.Read(bytes2, 0, length);
print("索引向前移动" + index + "个位置");

//得到最终的字符串 打印出来
print(Encoding.UTF8.GetString(bytes2));
fs2.Dispose();
  1. 方法二:一次性读取再挨个读取
FileStream fs3 = File.Open(Application.persistentDataPath + "/Lesson3.tang", FileMode.Open, FileAccess.Read);

// 一开始就申明一个 和文件字节数组长度一样的容器
byte[] bytes3 = new byte[fs3.Length];
fs3.Read(bytes3, 0, (int)fs3.Length);
fs3.Dispose();

// 读取整数
print(BitConverter.ToInt32(bytes3, 0));

// 读取字符串字节数组的长度
int length2 = BitConverter.ToInt32(bytes3, 4);

// 得到字符串
print(Encoding.UTF8.GetString(bytes3, 8, length2));
fs3.Dispose();
五、使用 using 读取文件

​ using 关键字重要用法:

using (申明一个引用对象) {
    // 使用对象
}

​ 无论发生什么情况,当 using 语句块结束后,会自动调用该对象的销毁方法,避免忘记销毁或关闭流

​ using 是一种更安全的使用方法

​ 强调:目前我们对文件流进行操作,为了文件操作安全,都用 using 来进行处理最好

​ 例如:

using (FileStream fs3 = File.Open(Application.persistentDataPath + "/Lesson3.tang", FileMode.Open, FileAccess.Read)) {
    // 一开始就申明一个 和文件字节数组长度一样的容器
    byte[] bytes3 = new byte[fs3.Length];
    fs3.Read(bytes3, 0, (int)fs3.Length);
    fs3.Dispose();
    
    // 读取整数
    print(BitConverter.ToInt32(bytes3, 0));
    
    // 读取字符串字节数组的长度
    int length2 = BitConverter.ToInt32(bytes3, 4);
    
    // 得到字符串
    print(Encoding.UTF8.GetString(bytes3, 8, length2));
}

​ 通过 FileStream 读写时一定要注意:读的规则一定是要和写是一致的

​ 我们存储数据的先后顺序是我们制定的规则,只要按照规则读写就能保证数据的正确性文章来源地址https://www.toymoban.com/news/detail-464266.html

到了这里,关于2022-10-26 Unity 2进制2——文件流操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数

    提示:数据结构进制转化: 编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数 代码如下(示例): 运行效果展示: 运行效果展示: 数据结构中编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数

    2024年02月06日
    浏览(40)
  • 【c语言】二进制文件的读写操作

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c语言系列专栏:c语言之路重点知识整合 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 本文基

    2024年02月12日
    浏览(31)
  • C++文件操作->文本文件(->写文件、读文件)、二进制文件(->写文件、读文件)

    #includeiostream using namespace std; #include fstream//头文件包含 //文本文件 写文件 void test01() {     //1.包含头文件  fstream     //2.创建流对象     ofstream ofs;     //3.指定打开方式     ofs.open(\\\"test.txt\\\", ios::out);     //4.写内容     ofs \\\"姓名:张三\\\" endl;     ofs \\\"性别:男\\\" endl;     

    2024年02月20日
    浏览(32)
  • docker 建一个nginx容器,对外提供静态文件服务

    拉取nginx镜像 启动容器 访问时:http://localhost:80/a.jpg 端口号后加文件名字 !!!想要实现文件浏览,必须要在nginx.conf里的http{}里和default.conf里的server{}里添加autoindex on         docker nginx 把一个nginx.conf分成两个,         (nginx.cong)和(default.conf)         访问时:

    2024年02月03日
    浏览(31)
  • git中某些二进制文件无法合并,怎么操作pull更新

    当在Git中进行`pull`操作时,如果遇到某些二进制文件无法合并的情况,通常会导致冲突。 1. 首先,运行`git status`命令,查看哪些文件存在冲突。   2. 打开冲突的文件,正常情况下,.h或者.cpp文件,你会看到类似下面的内容:    ```     HEAD    // 本地版本的内容    =======  

    2024年01月18日
    浏览(31)
  • 二进制安装1.26版本k8s(docker)

    v1.24.0 - v1.26.0 之前支持docker,但是需要额外安装cri-docker来充当垫片 由于工作原因作者会同时使用Ubuntu和CentOS,因此本次将两个系统的K8S安装一起记录一下(与CentOS7.9、Ubuntu2004验证) 证书采用cfssl工具制作 使用二进制方式部署3主1从高可用集群 etcd采用二进制部署,复用3个管理

    2024年02月10日
    浏览(52)
  • C++文件操作基础 读写文本、二进制文件 输入输出流 文件位置指针以及随机存取 文件缓冲区以及流状态

    文本文件一般以行的形式组织数据。 包含头文件: #include fstream 类: ofstream(output file stream) ofstream 打开文件的模式(方式):类内open()成员函数参数2.参数1是文件存储/创建路径 例如:fout.open(filename,ios::app); 对于 ofstream,不管用哪种模式打开文件,如果文件不存在,都会创

    2024年01月25日
    浏览(39)
  • C语言--文件操作详解(2)(文本文件和二进制文件,文件读取结束的判定,用函数进行文件的拷贝,文件缓冲区)

    本篇文章主要介绍了文本文件和二进制文件,文件读取结束的判定,如何使用函数进行文件的拷贝,文件缓冲区的相关知识。 以及具有保存功能的八功能通讯录的源码。 据数据的组织形式,数据文件被称为文本文件或者二进制文件。 ①数据在内存中以二进制的形式存储,如

    2024年02月08日
    浏览(38)
  • 2022 年 GameFi 的 26 个关键数据

    2022 年 12 月 数据源:Footprint Analytics - 2022 年 GameFi 全年数据概括 去年的 GameFi 领域发生了很多事情。 虽然 Axie Infinity 和 The Sandbox 仍旧占据着最多的头条新闻,但几个不为大众所知的项目得到了许多玩家的青睐。 虽然 BNB 和以太坊基金会成为区块链行业中最有影响力的组织,

    2024年02月05日
    浏览(19)
  • 【Unity】二进制文件 数据持久化(修改版)【个人复习笔记/有不足之处欢迎斧正/侵删】

             变量的本质都是二进制 ,在内存中都以字节的形式存储着,通过sizeof方法可以看到常用变量类型占用的字节空间长度( 1byte = 8bit,1bit(位)不是0就是1 )         二进制文件读写的本质: 将各类型变量转换为字节数组,将字节数组直接存储到文件中 ,不仅可以节

    2024年04月17日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包