1.  用HeapByteBuffer放int占几个byte?

占4个。而且不论你是放1还是-1还是0xffff。

因为int的长度是4个byte,HeapByteBuffer的存储又是byte数组。

2. 用HeapByteBuffer放char占几个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中基本类型的长度相关基础知识-LMLPHP

更多的参见

“java语言使用的是Unicode编码”是指的jvm?.java文件?

3. unicode与utf-8是怎样的区别

参见 Unicode 和 UTF-8 有何区别?  标题问法不是很严格

关于Java中基本类型的长度相关基础知识-LMLPHP

4. 对于1中的整数“浪费空间”的问题有什么办法

参见h2数据库的org.h2.mvstore.DataUtils.writeVarInt(ByteBuffer, int)方法,能做到按需占用。

04-30 10:54