【C#】探索数据传输对象1

 

什么是“从当前流中读取一个字符串。字符串有长度前缀,一次 7 位地被编码为整数。”

来探索一下:

写一段简单的程序:

FileStream fs= new FileStream("d:\\qqq.txt",FileMode.Create);
          var bw = new BinaryWriter(fs, Encoding.UTF8);//通常情况下可以不写编码 这里加上便于理解
          bw.Write("hello world!");
          Console.WriteLine("成功写入");
          bw.Close();
          fs.Close();

          FileStream fs2 = new FileStream("d:\\qqq.txt", FileMode.Open);
          var br = new BinaryReader(fs, Encoding.UTF8);
          Console.WriteLine(br.ReadString());

 

1.在写入文件的时候指定或默认编码,这样字符就可以转换为字符集对应编码(ASCII 八进制 十六进制)

传输或者保存的时候就会保存为相应的标准可传输的进制(再从这些进制转到二进制,网络传输用二进制)

2.用编辑器打开时,默认的会给我们转到10进制,转成字符集所对应的显示文字。(计算机很聪明 做事很得体 妹子都喜欢这样的男朋友吧)

ps:

 

 

来看下刚才写得qqq.txt文件,

用UE查看 开头)16进制 0C = 10进制 12,正好是字符长度.

来看一下 BinaryWriter.Write 

 

读写遥相呼应,配合使用。

其他的重载也是一样的用法。

==================================进阶研究==================================

byte[] buffer = new byte[512];
                       while ((size = netstream.Read(buffer, 0, buffer.Length))>0)
                       {
                           fs.Write(buffer, 0, size);
                           len += size;
                       }

 

var br = new BinaryReader(netstream);
Console.WriteLine(br.ReadString());

 

从同一个stream上取数据这两个方法 得到结果却不一样, 为什么呢?

Read 只会返回byte[]数据对象,  readstring 只能得到BinaryWriter进去的数据。

BinaryWriter 不写入内容时 readstring为何会出现乱码?

来试验几种情况

 

在不写BinaryWriter  情况下,接收端处理 readstring 将会把开头部分数据读到readstring中,剩余数据被read读出来。

 

 

 

传输开始后 netstream将会被监听

 

 

 

发送端加了using后  都不需要关心服务端 接收到的bytes 长度是否大于0,(猜想传输监听有两种方法1通过是否还有数据传过来,2.close、dispose状态的级别更高,直接关闭掉)

 

时间: 2024-10-23 13:46:56

【C#】探索数据传输对象1的相关文章

应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较(转)

本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较. 领域实体为何不能一统江湖? 当你阅读我或其它博主提供的示例代码时,会发现几种类型的实体,这几种实体初步看上去区别不大,只是名称不同,特别在这些示例非常简单的情况下更是如此.你可能会疑惑为何要搞得这么复杂,采用一种实体不是更好? 在最理想的情况下,我们只想采用领域实体Entity进行所有的操作. 领域实体是领域层的核心,是业务逻辑的主要

ABP官方文档翻译 4.3 校验数据传输对象

校验数据传输对象 校验简介 使用数据标注 自定义校验 禁用校验 标准化 校验简介 应用的输入首先应该被校验.输入可以是用户的也可以是其他应用的.在一个web应用中,校验通常实现两次:客户端和服务端.客户端校验是为了用户体验.最好现在客户端校验表单并显示给用户无效的字段.但是,服务端校验要更紧要且不可避免的. 服务端校验一般在应用服务或控制器实现(通常,所有的服务从展示层获得数据).应用服务方法应该先检查(校验)输入再使用.ABP提供了良好的基础设施来自动校验应用的输入: 所有的应用服务方法 所有

【Web API系列教程】3.5 — 实战:处理数据(创建数据传输对象)

现在,我们的Web API暴露数据库实体给客户端,而客户端接收直接映射到你的数据库表的数据.然而,这不永远都是个好办法.有时候你可以想要改变发送到客户端的数据的形式.例如,你可以想要: 1, 移除环形引用(见上一章) 2, 隐藏客户端不应该看到的特定属性 3, 为了减少有效载荷而省略一些属性 4, 拼接包含嵌套的对象图,以使它们对客户端更便利 5, 避免"over-posting"漏洞(查看Model Validation(http://www.asp.net/web-api/over

ABP应用层——数据传输对象(DTOs)

ABP应用层——数据传输对象(DTOs) 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 数据传输对象(Data Transfer Objects)用

ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 数据传输对象(Data Transfer Objects)用于应用层和

第5章分布式系统模式 Data Transfer Object(数据传输对象)

正在设计一个分布式应用程序,为了满足单个客户端请求,您发现自己对一个远程接口发出了多个调用,而这些调用所增加的响应时间超出了可接受的程度. 影响因素 在与远程对象通信时,请考虑下列需要权衡的因素: 远程调用(那些必须跨越网络的调用)速度缓慢.虽然许多远程调用框架可以隐藏进行远程调用的复杂性,但是它们不能消除发生通信所需的步骤.例如,必须先找到 远程对象位置,而且建立与远程计算机的连接,然后才能将数据串行化为字节流,然后可能进行加密,最后才能将其传输到远程计算机. 在 考虑网络性能时,必须同时考虑

贫血模型;DTO:数据传输对象(Data Transfer Object);AutoMapper ;Domain Model(领域模型);DDD(领域驱动设计)

====================== 我自己的理解 ========================== 一:  DTO  我自己的理解,就是 比如你有一个类,跟数据库的table表结构一模一样,主键外键什么的都有,但是这个 model类,你返回数据到 UI层的时候,有些数据是不用的,你就得自己new一个新类出来,新的类从旧的类里面拿值,然后给别人用的就是新的类别,有点类似于我们做接口给android手机用一样的,数据库的类和接口用的类,很相似,但是东西少了的很多,这个新的类(缺胳膊断腿

为什么需要DTO(数据传输对象)

DTO即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,为什么不能直接用实体模型呢,有了DTO同时还要维护DTO与Model之间的映射关系,多麻烦. 然后看了这篇文章中的讨论部分才恍然大悟. 摘两个比较有意义的段落. 表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它 的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递.为何不能直接将领域对象用于 数据传递?因为领域对象更注重领域,而DTO更注重数据.不仅如

我们为什么需要DTO(数据传输对象)

DTO即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,为什么不能直接用实体模型呢,有了DTO同时还要维护DTO与Model之间的映射关系,多麻烦. 然后看了这篇文章中的讨论部分才恍然大悟. 摘两个比较有意义的段落. 表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它 的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递.为何不能直接将领域对象用于 数据传递?因为领域对象更注重领域,而DTO更注重数据.不仅如