当前位置:  技术问答>java相关

String.getBytes的问题

    来源: 互联网  发布时间:2015-09-28

    本文导语:  char a1=(int)10; char a2=(int)200; char a3=(int)23; StringBuffer sb = new StringBuffer(); sb.append(a1); sb.append(a2); sb.append(a3); try {      out.write(sb.toString().getBytes());      out.flush(); } catch (Exception ex) { } out为OutputStream。 现在问...

char a1=(int)10;
char a2=(int)200;
char a3=(int)23;

StringBuffer sb = new StringBuffer();
sb.append(a1);
sb.append(a2);
sb.append(a3);

try {
     out.write(sb.toString().getBytes());
     out.flush();
} catch (Exception ex) {

}

out为OutputStream。
现在问题是:
我收到的消息中,长度根本不是3个字符长?收到的消息中,a1是对的,a3也是对的,可是a2却不知道变成什么了??有些时候可以变成有3个字符长了,真不明白为什么?sb.toString()之后,我查过还是没有问题的,所以我怀疑是getBytes()的问题,各位有没有什么好的意见?

|
Java里的char是16位的,也就是被吹得很神的Unicode,而byte是8位的,它才是相当于我们在C里了解的char。
String中的使用的是char,也就是16位的,在getBytes的时候,它的转化很有意思,如果是小于128,也就是16位的前8位为0,它就放到一个byte中,因为这么做不会造成任何精度损失,大于128的,如果采用同样的手段就会有问题,所以,放入两个byte中。你可以做一下实验。String的长度和getBytes出来byte数组长度实际上是不相等地。
这么做实际上是合理的,你可以想一下。如果我们做一个网络传输的例子,一边是Java程序,另一边是C程序,如果每个字节都转成2个byte的话,小于128的势必要被要有高字节为0,而在C程序里0代表着字符串截止,你的处理就会出现问题。

|
byte是8位有符號整數,在-128~127之間
char是16位無符號整數,取值範圍為065535,作為字母數字它與高位置0的ASCII字符一樣

|
不懂,但建议你看看jdk的源码,也许有用

    
 
 

您可能感兴趣的文章:

  • java命名空间java.lang类string的类成员方法: getbytes定义及介绍
  • 出错啊!?String str = new String(temp.getBytes("ISO8859-1"), "GBK");
  • String.getBytes()问题
  • 问个低级的问题:我从库里取汉字时候,代码如下:String ls=ob.test(i);String dbstr1= new String(ls.getBytes("ISO-8859-1"),"GBK");
  • 如何解决写入文件的汉字可以用文本打开不是乱码 new String(wstr.getBytes("ISO-8859-1"),"GB2312");
  • 请问,我用String str2 = new String(rs.getString(2).getBytes("ISO8859_1"),"gb2312");为什么总抱错啊??
  • 汉字的问题:我用纯java把汉字从库里取出来显示,代码如下:String dbstr1= new String(ls.getBytes("ISO8859_1"),"gb2312"),可一部分字
  • 问一个简单问题,String和String Buffer有什么区别?
  • 问一个很蠢的问题:如:void main(String[] args);为什么一定要带上(如String[] args)参数
  • int to string 值转换问题
  • 菜鸟问题-如何将char[]转化为string??
  • 关于String 比较的一个问题
  • 刚学linux,请教个string问题
  • 关于string类的一个问题
  • 有关java中String类的方法的一个问题,急用!!!
  • String类型数据与Date类型转换的问题?
  • 弱弱地问,string的处理问题
  • 关于String类的简单问题
  • 关于String类的trim()方法的问题
  • 关于String的问题,谢谢!
  • 怎样把type为int的数据强制转化成String型???(很菜的问题,大家见笑了:-))
  • 菜问题:如何进行数据类型的转化,比如int转化为string
  • string问题一个???????????????????????????
  • 问大家一个简单问题:int怎么转成String?有什么好方法?
  • 关于String的简单问题,在线等待
  • 关于日期型转换成string 的问题---急,在线等待!
  • 简单问题:String怎么转换为int
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.lang类string的类成员方法: string定义及介绍
  • 请告知一下String s1 = "mm"; 与String s1 = new String("mm");的区别!
  • C++ Bitsets 成员 to_string():返回bitset的字符串表示
  • String s = new String() 和 String s= null;有什么区别?
  • java命名空间javax.xml.xpath类xpathconstants成员方法: string定义参考
  • 已知a=1,b=2 String string="a+b";如何将string转化为表达式,并计算结果
  • java命名空间javax.management.openmbean类simpletype<t>的类成员方法: string定义及介绍
  • 对String.indexOf(String str,int fromIndex);和lastIndexOf(String str, int fromIndex);的困惑!
  • java命名空间java.io接口objectstreamconstants的类成员方法: tc_string定义及介绍
  • c#中 String和string的区别介绍
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: query_string定义参考
  • String a="123"与String a=new String("123")出来的两个a,b之间有什么区别???
  • java命名空间java.lang类string的类成员方法: copyvalueof定义及介绍
  • static String和String如何互相赋值?
  • java命名空间javax.imageio.metadata接口iiometadataformat的类成员方法: datatype_string定义及介绍
  • 请问“new String[]{(String ) ob}”怎么理解??
  • java命名空间javax.print类docflavor.string的类成员方法: text_plain定义及介绍
  • 内容是String[]的Object用什么最简单办法转变回String[]
  • java命名空间java.lang类string的类成员方法: valueof定义及介绍
  • sqlserver iis7站长之家
  • java命名空间java.lang类string的类成员方法: tostring定义及介绍
  • 请问 int indexOf(String str)和 int lastIndexOf(String str)方法有什么区别?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3