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

C# 流Stream详解(2)——FileStream、BinaryReader、MemorySream、SreamReader等之间的关系

【文件流】

电脑上的文件有很多,文本文件、音频文件、视频文件、图片文件等,这些文件会被持久化存储在磁盘上,其本质都是一堆二进制数据。

FileStream用于读取二进制文件。电脑上的所有文件,不管是文本、音频、视频还是其他任意格式的文件,都可以用FileStream读取。不过读取到的都是二进制数据,需要知道如何反序列化才能得到对应的看得懂的信息。像图片的png格式、视频的mp4格式等,都是公开的反序列化方法。

通过文件流(FileStream)可以做到更细粒度地读取文件,一部分一部分,甚至一个字节一个字节地去读文件,而不是一个文件一个文件地读取。

流整体的来看是不断有东西从一个地方到另一个地方,强调这个过程,例如高铁站进站人流是从站外到站内,文件流是从磁盘到内存,具体来看是流内基本单位从一个地方到另一个地方,例如人流的基本单位是一个人,文件流的基本单位是一个字节。

如果人比较多,五个人一组,一组一组进站,这也是流,基本单位是5个人。如果文件很大,分成很多个文件,一个文件一个文件的读取,也是流,基本单位是一个文件。

TextReader/TextWriter用来高效处理文本文件的读写,基本单位是字符,但它们是抽象类,不能实例化。StreamReader/StreamWriter用于实现文本与二进制之间的转换。(Json文件、cpp文件、cs文件、prefab文件等都是文本文件)

BinaryReader/BinaryWriter用于二进制文件的读写,基本单位是字节。

其他流

FileStream是从磁盘到内存的读和从内存到磁盘的写

MemoryStream是在内存中读写,用于解决内存中各种流的交换

NetWorkStream网络流用来处理服务器与客户端通信的流

BufferedStream BufferedStream从其他Stream读取或写入字节,以提高某些I / O操作的性能。

GZipStream:用于实现压缩解压的流

Cryptostream:用于加密解密的流

文件流的基本操作FileMode

  • Open:打开文件,前提是文件已经存在
  • Create:创建文件
  • OpenOrCreate:打开文件,如果文件不存在,则创建文件
  • Append:附加内容,即向文件中添加新的内容
  • Truncate:打开文件时将文件里面的内容清空,简化了删除文件再创建同名文件的步骤

文件读写权限FileAccess

  • Read:读取权限
  • Write:写入权限
  • ReadWrite:读写权限

【Stream类】

Stream是流的抽象类,任何流都需要继承这个类,有C#预定义的各种流的实现,这些实现让我们不用关心操作系统和基础设备交互等信息。

流的三个基本操作是读取、写入、查找,分别对应三个基础属性CanRead、CanWrite、CanSeek

常用属性

  • Length:流的长度,也即文件的大小,文件本身会记录关于大小的信息,只需要读取文件头就能获得,而不需要读取到整个文件才知道大小。需要注意的是,由于内存对齐等原因,文件大小不一定等于内存占用大小
  • Position:当前读写流的位置,将文件内容看成一个很长的字节数组,Position相当于Index。在文件开头,Position=0;在文件末尾,Position= Array.Length-1

常用方法

  • abstract long Seek(long offset, SeekOrigin origin):指定读写流的位置。Stream. Seek(-10,Origin.End);  表示在流末端往前数第10个位置;Stream. Seek(0,Origin.Begin); 表示在流的开头位置;Stream. Seek(1,Orig`in.Current); 表示在流的当前位置往后数第1个位置。
  • abstract int Read (byte[] buffer, int offset, int count);从流当前位置读取数据放入一个buffer中,读取数据的长度为count,放入buffer中的起始位置是offset,返回实际从流中读取的长度。一般来说,返回值和count相等,如果在流的末尾,可能直接读完了,返回值比count小。
  • abstract void Write (byte[] buffer, int offset, int count):从当前流的位置写入数据,数据从buffer中来,从buffer的offset位置开始写入,写入数据的长度为count。
  • Close()和Dispose():没什么好说的,就是在读取数据进行一系列的处理之后,可能忘记调用了。建议写代码按照一定的顺序来,读取文件之后立刻先把close和dispose写好,再处理中间的数据处理流程。

相关文章:

C# 流Stream详解(2)——FileStream、BinaryReader、MemorySream、SreamReader等之间的关系

【文件流】 电脑上的文件有很多,文本文件、音频文件、视频文件、图片文件等,这些文件会被持久化存储在磁盘上,其本质都是一堆二进制数据。 FileStream用于读取二进制文件。电脑上的所有文件,不管是文本、音频、视频还是其他任意…...

【JavaSE】详解final关键字

在Java中,final可以用来修饰类、方法和变量。final修饰类,表示该类无法被继承,并且此类的设计已被认为很完美而不需要进行修改或扩展。final修饰类中的方法,表示不可以被重写;也就是把该方法锁定了,以防止继…...

问道管理:机器人概念走势活跃,新时达涨停,拓斯达、丰立智能等大涨

机器人概念17日盘中走势活跃,到发稿,拓斯达大涨18%,昊志机电涨近16%,丰立智能涨超13%,步科股份、优德精细涨超10%,新时达涨停,天玑科技、兆龙互联、中大力德涨逾9%。 消息面上,8月16…...

elementui 修改日期选择器el-date-picker样式

1. 案例: 2. css /* 最外层颜色 */ .el-popper.is-pure {background: url("/assets/imgList/memuBG.png") no-repeat;border: none;background-size:100% 100%}/* 日期 1.背景透明 */ .el-date-picker{background: transparent; }/* 日期 2.标题、左右图…...

自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam

😀前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-RequestParam 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家&#xff0c…...

数据可视化:图表绘制详解

数据可视化是一种将抽象的数字和数据转化为直观图形的技术,使数据的模式、趋势和关系一目了然。本文将详细介绍如何绘制各种类型的图表,包括柱状图、折线图、饼图、散点图和热力图等。 第一部分:图表类型和选择 1. 柱状图 柱状图是用于比较类…...

【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)

漏洞描述 Apache Ivy 是一个管理基于 ANT 项目依赖关系的开源工具,文档类型定义(DTD)是一种文档类型定义语言,它用于定义XML文档中所包含的元素以及元素之间的关系。 Apache Ivy 2.5.2之前版本中,当解析自身配置、Ivy 文件或 Apache Maven 的 POM 文件…...

C#使用自定义的比较器对版本号(编码)字符串进行排序

给定一些数据,如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “…...

AI在日常生活中的应用:从语音助手到自动驾驶

文章目录 AI的定义和发展AI在日常生活中的应用1. **智能语音助手**2. **智能家居**3. **智能医疗**4. **自动驾驶** 代码示例:使用Python实现基于机器学习的图片分类AI的未来前景结论 🎉欢迎来到AIGC人工智能专栏~探索AI在日常生活中的应用 ☆* o(≧▽≦…...

Windows10查看图片的分辨率

文章目录 查看方法 查看方法 鼠标悬停在想查看分辨率大小的图片上,稍等那么零点几秒,就会弹出图片的分辨率信息,如图所示:...

Spring事务和事务传播机制(2)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和…...

计算机视觉 -- 图像分割

文章目录 1. 图像分割2. FCN2.1 语义分割– FCN (Fully Convolutional Networks)2.2 FCN--deconv2.3 Unpool2.4 拓展–DeconvNet 3. 实例分割3.1 实例分割--Mask R-CNN3.2 Mask R-CNN3.3 Faster R-CNN与 Mask R-CNN3.4 Mask R-CNN:Resnet1013…...

ubuntu18.04复现yolo v8之CUDA与pytorch版本问题以及多CUDA版本安装及切换

最近在复现yolo v8的程序,特记录一下过程 环境:ubuntu18.04ros melodic 小知识:GPU并行计算能力高于CPU—B站UP主说的 Ubuntu可以安装多个版本的CUDA。如果某个程序的Pyorch需要不同版本的CUDA,不必删除之前的CUDA,…...

Redis三种模式——主从复制,哨兵模式,集群

目录 一、主从复制 1.1主从复制的概念 1.2Redis主从复制作用 1.2.1数据冗余 1.2.2故障恢复 1.2.3负载均衡 1.2.4高可用基石 1.3Redis主从复制流程 1.4部署Redis 主从复制 1.4.1.环境部署 1.4.2.所有服务器都先关闭防火墙 1.4.3.所有服务器都安装Redis 1.4.4修改Master主节点R…...

mysql8.0.31新增只读远程普通用户

在 MySQL 8.0.31 中,可以通过以下步骤新增只读远程普通用户: 1、使用 root 用户登录 MySQL 数据库。 mysql -u root -p 2、创建用户: CREATE USER username% IDENTIFIED WITH mysql_native_password BY password ; 其中,username…...

揭开路由协议隐藏的风险

路由协议在互联网和基于其的服务的运行中发挥着至关重要的作用。然而,许多这些协议的开发都没有考虑到安全问题。 例如,边界网关协议 (BGP) 最初并未考虑对等点之间发生攻击的可能性。过去几十年来,BGP 中的起源和路径验证已投入了大量工作。…...

图片因固定宽高被拉伸了?object-fit:一个神奇的属性

一、问题产生的场景 近期在完成项目开发时,测试人员针对漫画长图上传后的展示提出了一个界面优化的点,因为其特点是长,但是我们展示图片的区域是固定的,如果我们按照正常思路将图片的宽高写死,确实占位大小的问题解决了…...

客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线

客户背景 中圣科技(江苏)股份有限公司(以下简称“中圣科技”),是一家以技术研发为驱动,以清洁能源核心成套装备和节能环保工程服务为支撑的科技创新型企业。其以南京为核心运营基地,与当地政府…...

pandas数据分析40——读取 excel 合并单元格的表头

案例背景 真的很容易疯....上班的单位的表格都是不同的人做的,所以就会出现各种合并单元格的情况,要知道我们用pandas读取数据最怕合并单元格了,因为没规律...可能前几列没合并,后面几列又合并了....而且pandas对于索引很严格&am…...

Java后端开发面试题——微服务篇总结

Spring Cloud 5大组件有哪些? 随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 sentinel 服务网关 Gateway Ribbon负载均衡策略有哪些 ? RoundRobinRule&…...

第十一章MyBatis查询专题

返回单个Car 返回单个可以直接用Car接收返回参数 Car carCarMapper.getOne(100);返回多个Car 返回多个可以直接用List接收返回参数 List<Car> carCarMapper.getAll();用一个对象无法接受返回多个参数&#xff0c;用list可以接收返回一个参数 返回Map 如果没有合适的…...

测试驱动开发(TDD)

测试驱动开发&#xff08;TDD&#xff09; 本篇文章简单叙述一下什么是测试驱动开发&#xff0c;以及怎么进行测试驱动开发&#xff01; TDD &#xff08;Test Driven Development&#xff09;&#xff1a;&#xff08;源于极限编程&#xff08;XP&#xff09;&#xff09;在不…...

深度学习|CNN卷积神经网络

CNN卷积神经网络 解决的问题人类的视觉原理原理卷积层——提取特征池化层——数据降维全连接层——输出结果 应用图像处理自然语言处理 解决的问题 在CNN没有出现前&#xff0c;图像对人工智能来说非常难处理。 主要原因&#xff1a; 图像要处理的数据量太大了。图像由像素组…...

【洁洁送书第五期】为什么我们要了解可观测性工程

导读 可观测性已成为一个热门话题&#xff0c;并广受关注。随着它的普及&#xff0c;“可观测性”不幸被误作“监控”或“系统遥测”的同义词。可观测性是软件系统的一个特征。而且&#xff0c;只有当团队采用新的实践进行持续开发时&#xff0c;才能在生产软件系统中有效利用这…...

将vue项目通过electron打包成windows可执行程序

将vue项目打包成windows可执行程序 1、准备好dist将整个项目打包 npm run build2、安装electron依赖 npm install electron --save-dev npm install electron-packager --save-dev"electron": "^13.1.4", "electron-packager": "^15.2.0…...

【0基础入门Python Web笔记】三、python 之函数以及常用内置函数

三、python 之函数以及常用内置函数 函数函数定义函数调用函数参数返回值 常用内置函数input()函数range()函数其它 更多实战项目可进入下方官网 函数 函数是一种用于封装可重复使用代码块的工具&#xff0c;能够将一系列操作组织成一个逻辑单元。 函数定义 在Python中&…...

相交链表00

题目链接 相交链表 题目描述 注意点 保证 整个链式结构中不存在环函数返回结果后&#xff0c;链表必须 保持其原始结构如果 listA 和 listB 没有交点&#xff0c;intersectVal 为 0 解答思路 两个链表从头开始遍历&#xff0c;如果其是在同一个位置处相交&#xff0c;则在…...

怎样压缩mp4视频大小?

怎样压缩mp4视频大小&#xff1f;由于视频文件的体积通常比其他类型的文件更大&#xff0c;因此它们需要更多的存储空间来保存。但是&#xff0c;如果我们的设备、应用程序或平台不支持某些视频格式或分辨率&#xff0c;或者我们没有足够的存储空间来容纳这些大型视频文件&…...

ubuntu20.04 安装使用 Indemind 双目相机

1、先按照官方wiki搭建环境 Ubuntu 安装 — IMSEE SDK 1.4.2 文档&#xff08;ubuntu20使用官网会报错&#xff0c;可以参考我下面的步骤&#xff09; 1.1、获取代码 sudo apt-get install git git clone https://github.com/indemind/IMSEE-SDK.git 1.2、准备依赖 cd <…...

一文读懂设备管理系统:是什么、谁需要、怎样选

工业的迅猛发展让人类向前迈出了史无前例的步伐&#xff0c;工业4.0将我们又带入了一个信息化技术促进工业变革的新时代——智能化时代。一台台机器设备是工业发展史上必不可少的参与者&#xff0c;但企业对设备的管理存在种种痛点&#xff0c;比如生产设备多&#xff0c;但备件…...

石家庄建站外贸网站/外链购买平台

package com.sq;import java.io.File; import java.nio.file.Path; import java.nio.file.Paths;import org.junit.Test;/*** 1.jdk 7.0时&#xff0c;引入了 Path、Paths、Files 三各类 2.此三各类声明在&#xff1a;java.nio.file 包下。 3.Path 可以看作是 java.io.File 类的…...

阿帕奇网站搭建/百度旗下产品

简介 提供一种方便、简捷、易学、易用的地图矢量、栅格数据格式\编码\坐标系转换工具。软件无需安装&#xff0c;硬件要求低、功能实用简洁。可以让没有任何GIS和测绘的背景的人也可以快速完成GIS数据转换和数据准备工作。从而避免在做数据转换这类最基本而简单的GIS操作时&…...

吉安百度seo/求职seo推荐

目录 在Python中返回数组的最大值或忽略任何NaN的最大值 NumPy.nanmax() 方法 示例 1: 示例 2: 示例 3: 返回Python中用scimath将输入值提高到的幂的结果 NumPy.lib.scimath.power 方法 示例 1: 示例 2:...

杭州响应式网站制作/chrome谷歌浏览器官方下载

目标&#xff1a;&#xff08;一一五&#xff09;中的问题203 地理数据的坐标系一般有两大类&#xff0c;一是地理坐标系(GCS)&#xff0c;是经纬度单位的椭球坐标系&#xff1b;二是投影坐标系(PCS)&#xff0c;是平面直角坐标系。 投影坐标系&#xff08;PCS&#xff09;的定…...

wordpress关于我们插件/武汉官网优化公司

今天&#xff0c;接到一个朋友的电话。他是做集成项目的&#xff0c;当时正在客户那边验收Cisco交换机&#xff0c;打电话问我如何鉴别Cisco设备的真伪。 老实说&#xff0c;这方面我也没什么经验&#xff0c;不过确实听说过目前市面上Cisco的假冒和水货很多&#xff0c;一不小…...

高端企业网站制作/饥饿营销案例

猫咪智能检测仪01产地&#xff1a;德国设备简介运用五色光谱原理&#xff0c;通过100W临床数据&#xff0c;360种皮肤解决方案&#xff0c;从皮肤病理维度、敏感维度、皱纹维度、毛孔维度、色斑维度、粉刺维度、紫质维度7大问题维度进行AI分析&#xff0c;并提供护肤解决方案。…...