ByteBuffer.wrap的问题

chandlersong 2008-10-23 01:42:57
我从一个文件中,读数据出来,数据是String型。
我的做法是首先读一个byte的字符串strchars.然后再把strchar转换成要输出的字符串。我用了两种方法。发现了出现以下不同。
如果说我直接用a=String(strchars)来取,在用System.out.print(a)。发现打印在控制台的字母,每个字母都要占两个字符的位置。
但是如果我用 a= ByteBuffer.wrap(strchars).asCharBuffer().toString()来取,然后再在控制台打印,每个字母就占一个字符的位置。
想请教一下,这有什么说法么?
...全文
1833 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chandlersong 2008-10-23
  • 打赏
  • 举报
回复
XinVSYuan。我试过,一个汉字应该占2个byte吧。我存储汉字,最后结果是能正常读写。所以说,我觉得不应该存在8bit丢失的问题。
不知道这有什么其他解释么?
XinVSYuan 2008-10-23
  • 打赏
  • 举报
回复
java中的字符用两个字节表示(规定),
就像int类型在不同系统中有区别一样
char类型只需8位就足够,至于8bit的损失好像是有!呵呵
chandlersong 2008-10-23
  • 打赏
  • 举报
回复
谢谢楼上的。
不过再看了楼上的解释之后,我产生了一个问题。
CharBuffer,和ByteBuffer中一个字节占的bit位是不是一样的?
因为如果一样,数据是死的。比方说16bit。那么在bytebuffer里面就是2个字节。而Charbuffer里面如果也是一个8bit一个字节的话,那么转化之后,就会有8bit字节的损失。
但是我不知道这样理解对不对。
XinVSYuan 2008-10-23
  • 打赏
  • 举报
回复
一下为sun提供的关于asCharBuffer()的说明


asCharBuffer()
public abstract CharBuffer asCharBuffer()创建此字节缓冲区的视图,作为 char 缓冲区。
新缓冲区的内容将从此缓冲区的当前位置开始。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。
新缓冲区的位置将为零,其容量和界限将为此缓冲区中所剩余的字节数的二分之一,其标记是不确定的。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。


在java中字符占用两个字节
chandlersong 2008-10-23
  • 打赏
  • 举报
回复
ByteBuffer buf;
buf = ByteBuffer.allocate(1024);
buf.get(strchars); //取得byte数组
Stringdata = ByteBuffer.wrap(strchars).asCharBuffer().toString();
System.out.print(Stringdate).
这种情况下打印的是正常的。比方说Stringdata= "aa" ,那么打印的就是aa

ByteBuffer buf;
buf = ByteBuffer.allocate(1024);
buf.get(strchars); //取得byte数组
Stringdata = String(strchars);
System.out.print(Stringdate).
这种情况下,打印出来的是就是每个a都占两个自己的位置
nine_suns99 2008-10-23
  • 打赏
  • 举报
回复
楼主的描述不是很清晰啊,把代码贴出来看看

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧