我新手 最近学习java的socket编程的时候用流发现了一个小问题 麻烦知道的高手说下。
问题就出在ByteArrayOutputStream这个流的转换上面。 
  byte[] data=new byte[50]; 
  ByteArrayOutputStream outBuf=new ByteArrayOutputStream();
  int i=0;
      while(i!=-1){
       i=in.read(data, 0, 50);
       if(i>0){
       outBuf.write(data, 0, i);
       }
      }
      byte[] datahead=outBuf.toByteArray();
      String Xml=datahead.toString();
//    String Xml=outBuf.toString();
      System.out.print(Xml); 问题就出现了 。两个输出的结果完全不一样。打//的可以正确得到结果 而用上面的方法无法得到正确的结果。我想了很久还是无法想到为什么会出现这种情况。 知道的说下啊 感激不尽啊
  

解决方案 »

  1.   

    byte[] datahead声明了一个数组,java中的数组也是当作对象看待的,基类(这个词不知道用在java里准不准)也是Object,在Object中定义了toString方法,默认是输出对象的“类名@散列码”,d数组自然没有重写父类Object的toString,所以它toString出来的东西还是“类名@散列码”,数组的类名有点奇怪(好像包括中括号和数组类型的第一个字符?),outputstream自身已经重写了Object的toString,打印结果就是其中的内容,这就是你问题的原因。关于toString和hashCode的更多内容,可以看看《java核心技术》。