java - charbuffer的flip()函数对CharsetEncoder编码的影响?
PHP中文网
PHP中文网 2017-04-17 11:47:56
0
0
526

没有注释掉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级讲师

reply all (0)
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!