zoukankan      html  css  js  c++  java
  • 第十四章 字符、字符串、编码

     

    一、字符:.NET FrameWork中字符总是表示成16位的 Unicode值。

     二、字符和数字转化有三种方式 直接转化、Convert、IConvertible

     

    三、字符串: string  存在于堆上属于引用类型。

    字符串拼接建议使用 StringBuilder,因为每次+号拼接会产生额外的内存开销,产生新的字符串。

    四、字符串比较:

    StringComparison.Ordinal 效率较高,先看字符数数量相等的话才开始比较,否则直接返回false ,这是忽略语言环境的前提下。

    System.StringComparer:适合大量字符串,反复执行同一比较。具体机制没有研究。

     

    五、字符串留用:简单的说就是为了节省内存消耗,共享字符串。原理是 一个Hash表,表中是一个个字符串,单是实际内存是在堆上。Hash特性 key的唯一性。达到了共享。

     

    六、字符串池:编译源码时候将单个字符串多个实例合并成一个。在编译字符串源码插入到元数据时候。元数据中该字符串的引用被修改为,引用同一个字符串实例(就刚被合并过后的那个实例)。这种技术叫做字符串池。而不是和线程池中线城池一样的概念。

     

    七、字符串编码: 字节在传输过程中需要编码,响应的接收方需要解码。为了安全、信息不丢失、等等就要编码解码。

    抽象类Encoding有个静态属性GetEncoding 静态属性是全局的公用的因此不会构建额外的对象,可以减少GC压力,首选该属性。

               Encoding.GetEncoding("abc");

               System.Text.UnicodeEncoding.GetEncoding("abv");//继承自 抽象类 Encoding

             System.Text.UTF8Encoding.GetEncoding("abv");//继承自 抽象类 Encoding

    因此后面的两个是抽象类Encoding的派生类,会产生额外的对象

     

    八、字节流编码:System.Net.Sockets.NetworkStream 的编码方式2种方案第一种上面的Encoding来编码,单是Encoding方式获取字节流时候需要是 2的倍数。因此还要利用获取数量的方式然后处理最末尾的字节流是否是2的倍数。因此有一个简单的方式就是Base64:他用System.Convert的静态方法来实施解码编码。

     

     

    九、安全字符串:System.Security.SecureString 用法如下

     

     

    他是在非托管内存中的加密字符串。仅仅在你调用她的 几个属性时候才处于未加密状态,

    AppendCahr、InSertAt、RemovAt、SetAt时候。

     

     

  • 相关阅读:
    delphi 数据导出到word
    use vue vuex vue-router, not use webpack
    样式化加载失败的图片
    HTML5 这些你全知道吗?
    移动端touch实现下拉刷新
    参与前端开源项目你应该了解的知识
    JavaScript 深浅拷贝
    精通移动端布局
    JavaScript模块
    两层Fragment嵌套,外层Fragment切换时内层Fragment不显示内容
  • 原文地址:https://www.cnblogs.com/LiMin/p/10861690.html
Copyright © 2011-2022 走看看