占4个。而且不论你是放1还是-1还是0xffff。
因为int的长度是4个byte,HeapByteBuffer的存储又是byte数组。
同1,是两个,因为java中char的长度是2byte。
同样,不论是存英文字符还是存中文字符,都占用2个byte。
示例代码
ByteBuffer buff = ByteBuffer.allocate(1024*1024); buff.putChar(‘c‘); System.out.println(buff.position()); buff.putChar(‘中‘); System.out.println(buff.position()); buff.flip(); char ch1 = buff.getChar(); char ch2 = buff.getChar(); System.out.println("ch1:" + ch1 + ",ch2:" + ch2);
上例中的’中’字在jvm中运转时是怎样编码的?
参见 Java虚拟机规范
更多的参见
“java语言使用的是Unicode编码”是指的jvm?.java文件?
参见 Unicode 和 UTF-8 有何区别? 标题问法不是很严格
参见h2数据库的org.h2.mvstore.DataUtils.writeVarInt(ByteBuffer, int)方法,能做到按需占用。
原文:http://www.cnblogs.com/simoncook/p/5770973.html