MemoryStream类相关

C#中的MemoryStream内存流 C#中的MemoryStream是一个实现了Stream类的内存流类,用于在内存中读写数据。它位于System.IO命名空间。 阅读详情
        public static void OnTestMemory()
        {
            //创建测试数据
            //CreateExampleData();

            //创建内存流对象,初始分配默认字节的缓冲区
            MemoryStream ms1 = new MemoryStream();

            //向内存流中写入字节数组的所有数据
            Console.WriteLine("写入数据前的内存流长度:{0} 分配的缓冲区大小:{1} 内存流当前的位置:{2}", ms1.Length.ToString(), ms1.Capacity.ToString(), ms1.Position.ToString());
            ms1.Write(buffer, 0, buffer.Length);
            Console.WriteLine("写入数据后的内存流长度:{0} 分配的缓冲区大小:{1} 内存流当前的位置:{2}", ms1.Length.ToString(), ms1.Capacity.ToString(), ms1.Position.ToString());

            byte[] byte1 = ms1.GetBuffer();
            string str1 = Encoding.UTF8.GetString(byte1);
            Console.WriteLine("当前流所有内容:{0}",str1);

            Console.WriteLine("内存流当前的位置:{0}", ms1.Position.ToString());
            //将读写指针移到距流开头2个字节的位置
            ms1.Seek(2, SeekOrigin.Begin);
            Console.WriteLine("调用Seek后当前的位置:{0},当前字节为:{1}", ms1.Position.ToString() , ms1.ReadByte().ToString());

            byte[] bytes3 = ms1.ToArray();
            Console.Write("获取把流写入字节数组的内容:");
            foreach (byte b in bytes3)
            {
                Console.Write(b + "-");//输出 97-98-99-100-101-100-99-98-97-   
            }
            Console.WriteLine("\n用于对比可以看到0,1,2第二位刚好是99");

            //设置当前流的长度
            Console.WriteLine(ms1.Length);   //输出9   当前流的长度是9
            ms1.SetLength(20);
            Console.WriteLine(ms1.Length);   //输出 20
            foreach (byte b in ms1.ToArray())    //将流的内容也就是内存中的内容转换字节数组
            {
                Console.Write(b + "-");     //输出 97-98-99-100-101-100-99-98-97-0-0-0-0-0-0-0-0-0 由于设置了长度,因此空的自动补0
            }
            Console.WriteLine("\n"+Encoding.UTF8.GetString(ms1.ToArray()));   //输出 abcdedcba   虽然长度变长了,但是没影响读取数据
            Console.WriteLine("\n下一个!!");

            MemoryStream ms2 = new MemoryStream();
            byte[] bytes6 = Encoding.UTF8.GetBytes("abcde");
            ms2.Write(bytes6, 0, bytes6.Length);
            Console.WriteLine("当前位置{0}",ms2.Position);    //输出 5 写完之后流的位置就到了最后,因此想用Read读取必须加下面这一行代码。 

            //ms2.Seek(0, SeekOrigin.Begin);    //想要用Read方法读取完整的流,必须设置当前的位置,既Read从Position的位置开始读。
            ms2.Position = 0;                   //Read现在从位置“0”开始读,这行代码和上面一行意义一样。
            byte[] byteArray = new byte[5] { 110, 110, 110, 110, 110 }; //110是经过UTF8解码之后为“n”
            Console.WriteLine("Read前:{0}", Encoding.UTF8.GetString(byteArray)); //输出 nnnnn
            //ms2.Read(byteArray, 2, 1);   //读取一个字节,byteArray的第一个元素中,(注意从0开始)
            //Console.WriteLine("Read后:{0}",Encoding.UTF8.GetString(byteArray)); //输出 nnann
            ms2.Read(byteArray, 2, byteArray.Length - 2);
            Console.WriteLine("Read后:{0}", Encoding.UTF8.GetString(byteArray)); //输出 nnabc    //当超出接收数组总长度的时候,后面的元素会被移开
            Console.WriteLine("\n下一个!!");

            MemoryStream ms3 = new MemoryStream();
            byte[] bytes4 = ms3.ToArray();
            Console.WriteLine("此内存流并没有写入数据(Write): [{0}]",Encoding.UTF8.GetString(bytes4));//输出    此内存流并没有写入数据(Write)  因为内存为空
            Console.WriteLine("\n下一个!!");

            //下面来一个指定位置的写入
            MemoryStream ms4 = new MemoryStream();
            byte[] bytesArr = Encoding.ASCII.GetBytes("abcdefg");
            ms4.Write(bytesArr, 0, bytesArr.Length);
            ms4.Position = 2;
            ms4.WriteByte(97);  //97代表的是a   这段代码的意思是,将原先第3位的c替换为a
            string str = Encoding.ASCII.GetString(ms4.ToArray());
            Console.WriteLine(str); //输出 abadefg

            byte[] byteArr1 = Encoding.ASCII.GetBytes("kk");
            ms4.Position = 4;
            ms4.Write(byteArr1, 0, byteArr1.Length);

            var byteArr = ms4.ToArray();
            Console.WriteLine(Encoding.UTF8.GetString(byteArr));  //输出:abadkkg   //从第5位开始替换掉了两个字节为KK
            var byteBuf = ms4.GetBuffer();
            Console.WriteLine(Encoding.UTF8.GetString(byteBuf));     //输出:abadkkg  

            ms1.Close();
            ms2.Close();
            ms3.Close();
            ms4.Close();

 

C# 数据流详解(FileStream、MemoryStream、NetworkStream等类) 本文仅为个人理解,如有错误请指正。 本文章内容主要为数据流及相关辅助类: 流(Stream)、文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)、加密流(CryptoStream)以及文本读写的StreamReader、StreamWriter、用于二进制读写的BinaryReader和BinaryWriter类等。 对FileStrea... 阅读详情

相关推荐

C#文件读写方法总结

1、File 同FileInfo比较(Directory 和DirectoryInfo类似) Directory 类和File类只包含静态方法,不能被实例化。只要调用一个成员方法,提供合适文件系统对象的路径,就可以使用这些类。如果只对一个文件夹或者文件执行一个操作,使用这些类就很有效,因为这样可以省去创建.NET对象的系统开销。 DirectoryInfo类和FileInfo类实现与Directo...

weixin_44007644的博客 683

C#中MemoryStream类的介绍

MemoryStream位于System.IO命名空间,为系统内存提供流式的读写操作。常作为其他流数据交换时的中间对象操作。 1、MemoryStream类封装一个字节数组,在构造实例时可以使用一个字节数组作为参数,但是数组的长度无法调整。使用默认无参数构造函数创建实例,可以使用Write方法写入,随着字节数据的写入,数组的大小自动调整。 2、在对MemoryStream类中数据流进行读取时,...

pan_junbiao的博客 4万+

C#大杂烩&&Strem流与二进制输入输出详解(FileStream,StreamReader,BinaryReader)例:从命令行上接收两个文件名,挑出不同的内容,以及比较长度

C#大杂烩&&Strem流与二进制输入输出详解(FileStream,MemoryStream,BufferedStream) 首先,要操作文件,需要引入System.IO,即在代码开头using System.IO; System.in中提供了许多用于文件和数据流进行读写操作的类,如Stream类,读写类等等,而这些类中 提供了很多针对文件、文件夹的操作功能,以及对各种数据进行访...

TurboQ珞珈 765

C# MemoryStream流的详解与示例

MemoryStream是System.IO命名空间中的一个类,它实现了Stream抽象类,提供了一系列用于操作数据流的属性和方法。在内存中处理数据,无需磁盘I/O。可以动态调整其大小。支持读取和写入操作。处理大量数据,例如图像、音频和视频文件。临时存储数据,例如网络传输过程中的数据缓冲。实现自定义数据流逻辑,例如加密或压缩数据。

qq_35320456的博客 4798

Python海康相机api---超简单入坑学习必看

海康官网下载相机驱动​安装好以后找到Python的开发文件目录参考:D:\MVS\MVS\Development\Samples\Python\MvImport这几个文件很重要,想调用海康相机取图会用到.​为了写代码方便可以把这几个文件拷贝一下,跟你的api主文件放在同一个文件夹下可以减少80%的烦恼.​。

weixin_59360687的博客 3478

MacOS上VScode配置PlatformIO Core的疑难杂症与提速实战

本文详细解析了在MacOS上使用VScode配置PlatformIO Core时遇到的安装卡死、新建项目缓慢等常见问题,并提供了官方脚本安装、网络优化、命令行预下载等实用解决方案。通过环境变量配置和镜像源加速,大幅提升开发效率,特别适合ESP32等嵌入式开发场景。

weixin_42567046的博客 220

使用MemoryStream类读写内存

使用MemoryStream类读写内存

wangnaisheng的专栏 2373

基于PLC的图书馆机器人设计与仿真

本文设计了一种基于PLC的图书馆机器人系统,该系统能提升图书馆自动化管理水平,选用西门子S7-1200系列PLC作为核心控制单元,结合电机驱动、传感器采集以及超声波避障等技术,设计出机器人行走、图书识别与分拣的功能模块,系统借助条形码扫描模块获取图书信息,将其分析后与设定的存放位置做对比,精准达成图书的存取和归还。仿真结果显示,机器人执行任务时运动控制响应时间是0.35秒,避障成功率为98.3%,图书识别准确率高达99.4%,在控制系统方面,运用STEP7-MICRO/WIN软件编程,结合WINCC设计组态

weixin_44553616的博客 1924

C# memoryStream

(转载)C#使用MemoryStream类读写内存 MemoryStream和BufferedStream都派生自基类Stream,因此它们有很多共同的属性和方法,但是每一个类都有自己独特的用法。这两个类都是实现对内存进行数据读写的功能,而不是对持久性存储器进行读写。 读写内存-MemoryStream类 MemoryStream类用于向内存而不是磁盘读写数据。MemoryStr...

cxu123321的博客 3570

三角洲自动购买工具 —— 基于 OCR 的价格识别与自动点击

通过的方式,我们可以轻松实现自动化的“价格监控 + 自动点击”工具。它的优势在于通用性—— 只要能截屏识别价格,就能用于任何程序,不依赖特定 API。未来可以扩展的功能:自动保存配置到文件。支持多价格区域检测。增加快捷键启停功能。

qq_62975494的博客 2418

VTK实战笔记(1)在win11搭建VTK-9.4.2 + qt5.15.2 + VS2019_x64开发环境

Visual Studio 2019 + qt5.15.2 + vtk9.4.2

心向阳光,斗志昂扬! 975

【转】!C#中的Stream相关

计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件)。图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件,由一些字符的串行组成,具有一定的编码规则。如果你将文本文件通过修改后缀的方式修改成图片,但对于程序来说本质上还是文本文件。 FileStream类——这个类主要用于在二进制文件中读写二进制数据——也可以使用它读写任何文件。流是传输数据的对象,介于程序中直接与流交互,可以将流理解为数据本身。一.

sinolover的专栏 1869

C# 开发 WPS 插件实战:从环境搭建到功能实现(附完整代码)

本文提供了一份详尽的C#开发WPS插件实战指南,涵盖从环境搭建到功能实现的完整流程。通过COM技术,开发者可以创建自定义插件,为WPS Office扩展自动化功能,如文档处理与格式转换。文章包含核心概念解析、Ribbon界面集成、调试部署方法及完整代码示例,帮助开发者快速上手。

rust6ferris的博客 927

关于c#:保存XmlDocument时,它将忽略XmlDeclaration(UTF8)中的编码,并使用UTF16

c# xml

翻肚鱼儿的博客 490

SPAD IMX479规格_分辨率

当然IMX479具备IMX459几乎全部的数字架构,但也有一个缺点就是贵,这个让头部的主机厂有些犹豫,毕竟大家都在集中火力想把车载LiDAR玩进千元机。如果用一片IMX479是不太可能实现千元内部的,当然国产也在奋起直追,特别在前面的几家SPAD厂商都具备开发IMX479的实力,但相对来说落地可能更是当下所考虑的,IMX479的迭代是基于IMX459,小编已经注意到国内有一两家已经在挑战479的规格了,如果国产SPAD没有大规模量产就直接流片IMX479的规格,可能就有点忽略市场的反馈闭环。

致力于lidar应用开发 2416

AI问数,智慧赋能:基于大语言模型的数据播报员应用实践探索

AI问数技术正在改变企业与数据交互的方式,它以自然语言为桥梁,让数据不再是少数专家的专利,而是成为所有业务人员的决策伙伴。这不仅是技术的创新,更是管理理念的革新。在数字化转型的关键阶段,企业应积极拥抱AI问数技术,通过降低数据使用门槛、提升数据利用效率、释放数据潜在价值,实现真正的数据驱动决策,为企业的高质量发展注入源源不断的智慧动能。AI问数,正在开启一个数据普惠的新时代。

getusushu的博客 64

C# System.IO 文件流输入输出

一、读写文本文件 可以用fileStream来读写文本文件,但是FileStream是通过字节形式来读写数据的,要把字节数据转换为文本,要自己处理编码转换。 对于文本文件的读写,通常用 StreamReader类和 StreamWriter类更方便。其底层是通过FileStream实现读写文本文件的。 1、构造函数 Public StreamReader(strin

Bryce1010's Blog 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# Winform编程(7)文件处理技术

FileInfo提供创建,复制,删除,移动和打开文件的实例方法,并且帮助创建FileStream对象。Directory类公开用于创建,移动和枚举通过目录和子目录的静态方法。System.IO命名空间常用的枚举。System.IO命名空间常用的类。File和FileInfo综合示例。

若有博文对您有帮助,欢迎点赞关注,收藏评论。 1071

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C#中的文件处理(1)

原文地址:http://www.dingos.cn/index.php?topic=1408.0【IO 命名空间和它类】System.IO 命名空间包含允许读写文件和数据流的类型以及提供基本文件和目录支持的类型。System.IO 命名空间包含便于在数据流和文件中读取和写入数据的类System.IO 命名空间中用于处理文件的类:BinaryReader、TextWriter、Binar

夜晚回家 1260

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

php string转bitmap,C#_C#实现的图片、string相互转换类分享,C#中,Image为源自 Bitmap 和 Metafi - phpStudy...

C#实现的图片、string相互转换类分享C#中,Image为源自 Bitmap 和 Metafile 的类提供功能的抽象基类,也就是说更通用,当我们用Image.FromFile("xxx")时创建出来的是Image的某个派生类实体,所以我用Image作为参数,而不是Bitmap之类的。图片在于string转换的时候中间借助于MemorySteam和Byte数组,下面是我写的FormatChan...

weixin_33330157的博客 253

C#流的概念

注意: 1、在计算机编程中,流就是一个类的对象,很多文件的输入输出操作都以类的成员函数的方式来提供。  2、计算机中的流其实是一种信息的转换。它是一种有序流,因此相对于某一对象,通常我们把对象接收外界的信息输入(Input)称为输入流,相应地从对象向外输出(Output)信息为输出流,合称为输入/输出流(I/O Streams)。对象间进行信息或者数据的交换时总是先将对象或数据转换

Van_chan 973

WPF中的文件和流 I/O

WPF中的文件和流 I/O 文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据。 在 .NET 中,System.IO命名空间包含允许以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。 这些命名空间还包含对文件执行压缩和解压缩的类型,以及通过管道和串行端口启用通信的类型。 文件是一个由字节组成的有序的命名集合,它具有永久存储。 在处理文件时,你将处理目录路径、磁盘存储、文件和目录名称。 相反,流是一个字节序列,可用于对后备存储进行读取和写入操作,后备存储可以是多个存储媒介之一(例如.

hjb_nice的博客 659

【转载】C#将图片以二进制流的方式存入数据库

在C#开发应用程序的过程中,图片一般会存放在文件系统中,当然图片也可以二进制的方式存放到数据库中,不过一般不建议存放在数据库中,因为图片占用的空间还是挺大的,特殊情况下可以考虑将图片存在数据。此文将介绍如何将图片存放在Sqlserver数据库中,并从数据库中读取出图片信息。 在将图片存储到数据库之前,需要先设计数据库表,建议使用sqlserver的数据类型Image类型存储数据,当然也有人使用二...

weixin_30338743的博客 553

.Net下的XML序列化(一)

XML序列化可以让你使用class-friendly的方式操作XML。我们可以方便的将某个类序列化成XML字符串或文件,这里是一个例子。Address类: [Serializable]publicclassAddress{publicAddress(){}publicstringStreet{...

weixin_33759269的博客 127
上一篇: 观察者模式(Observer Pattern)【行为型】 了解委托与事件的使用
下一篇: UDP与TCP的区别
Le_Sam
博客等级 码龄11年 342粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值