zoukankan      html  css  js  c++  java
  • 无题,李商隐,哈哈哈,随便写写

    1. 之前一直记着一个汉字是占两个字节,今天发现不是这样的,utf-8编码一个汉字是3个字节,以下为代码证明(GBK是一个汉字两个字节,这个没做实验)
      1 RandomAccessFile ra = new RandomAccessFile("F:\text.txt", "rw");
      2 FileChannel fc = ra.getChannel();
      3         ByteBuffer bb = ByteBuffer.allocate(6);
      4         String encoding = System.getProperty("file.encoding");
      5         fc.read(bb);
      6         bb.flip();
      7 System.out.println("decode using " + encoding + ":" + Charset.forName(encoding).decode(bb) + "  position当前位置:"
      8                 + bb.position() + " limit:" + bb.limit() + " capa:" + bb.capacity());

      打印结果: decode using UTF-8:中文  position当前位置:6 limit:6 capa:6

      由此可以看出一个中文的utf-8编码为3字节,如果不使用decode方法,bb.getChar()方法得到的是乱码,decode的方法针对的是缓冲器,无法 对其中的部分字节decode

    2. ByteBuffer的get()方法会使position后移一位,但指定索引时即get(i),position位置不变
    3. 从下面程序可以看出get()一次取得一个字节,那么,但char类型不应该是两个字节吗,应该一次取得两个字节才对,我看到网上也有人对此有误解
    4. System.out.println((char)bb.get() + " position当前位置:" + bb.position() +" limit:"+
               bb.limit() + " capa:" + bb.capacity());
      
      打印结果 :     a position当前位置:1 limit:3 capa:6

      实际上取得是一个字节没错,但这里是类型转换 ,把byte转换为char,空位以0补齐,所以得到的结果是a,  一个字节表示范围从-128到127,a的对应数字是97,所以一个字节完全可以表示,但char的类型确实是两个字节,但从文件中读取的是byte,并不是按照char类型来读取,只是后来强制转换了

  • 相关阅读:
    block和delegate的区别
    iOS真机测试友盟碰到错误linker command failed with exit code 1 (use -v to see invocation) 百度地图的检索失败 sqlite 错误码
    iOS国际化多语言设置
    获取本机ip地址
    iOS-Senior19-FMDB第三方应用
    iOS-Senior17-CoreAnimation动画
    iOS-Senior18-CocoPods的安装步骤
    iOS-Senior17-UIView动画
    iOS-Senior17-菊花风火轮(代码)
    iOS-Senior17-Gif动画图片(代码)
  • 原文地址:https://www.cnblogs.com/jarman/p/6188351.html
Copyright © 2011-2022 走看看