博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无题,李商隐,哈哈哈,随便写写
阅读量:5351 次
发布时间:2019-06-15

本文共 1185 字,大约阅读时间需要 3 分钟。

  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类型来读取,只是后来强制转换了

转载于:https://www.cnblogs.com/jarman/p/6188351.html

你可能感兴趣的文章
常用web字体的使用指南
查看>>
描绘应用程序级的信息
查看>>
poj2406-Power Strings
查看>>
2018/12/18 JS会像Linux一样改变编程
查看>>
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>