java - charbuffer的flip()函数对CharsetEncoder编码的影响?
PHP中文网
PHP中文网 2017-04-17 11:47:56
[Java讨论组]

没有注释掉cbuff.flip() ;这一句

import java.nio.charset.Charset ;
import java.nio.charset.CharsetEncoder ;
import java.nio.charset.CharsetDecoder ;
import java.nio.CharBuffer ;
import java.nio.ByteBuffer ;
import java.nio.charset.CharacterCodingException ;

public class Test 
{
    public static void main(String args[]) throws CharacterCodingException
    {
        Charset cn = Charset.forName("GBK") ;
        CharsetEncoder cnEncoder = cn.newEncoder() ;
        CharsetDecoder cnDecoder = cn.newDecoder() ;
        CharBuffer cbuff = CharBuffer.allocate(8) ;
        cbuff.put('哈') ;
        cbuff.put('哈') ;
        cbuff.put('哈') ;
        cbuff.flip() ;
        ByteBuffer bbuff = cnEncoder.encode(cbuff) ;
        System.out.println(bbuff.capacity()) ;
        System.out.println(bbuff.limit()) ;
    }
}

最后两句输出的capacitylimit就是6 ,这个我理解,
但是我如果注释掉cbuff.flip()这一句,最后两句输出的capacitylimit分别是10和5, 我想了一下, charbuffer分了8个字符的缓冲区, 占用了3个, 剩下的5个,用encode()编码成了bytebuffer,capacity是10, 但是limit为什么会是capacity的一半?这个的理由是什么呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号