你可以把报文长度放在包头发过来,再根据需要去开buffer。
比如socket的头部前10位表示你的长度。

解决方案 »

  1.   

    fileReader = new BufferedReader(new FileReader(filedName))
    用这个读
      

  2.   

    StringBuilder sb = new StringBuilder();
    int len = 0;
    while((r=in.read(bt))!=-1){
    sb.apend(new String(bt,"GBK"));
    len+=r;
    }
    System.out.println("收到的报文是:" + sb.toString());
    System.out.println("字节数是:" + len); 
      

  3.   

    in=socket.getInputStream(); 
    java.io.ByteArrayOutputStream bos=new java.io.ByteArrayOutputStream(); 
    byte[] buff=new byte[1024];
    int len=0;
    while((len=in.read(buff))!=-1){
        bos.write(buff,0,len);
    }
    byte[] result=bos.toByteArray();//这就是所有的字节。
      

  4.   

    如果没记错的话,in.available()就是实际的字符个数
      

  5.   

    包头定义多长,就应该有多长,除非你用特定字符表示包结束。
    如果用包头定义的长度,那么读多少字节可以直接得到,而不是在读的时候计算。
    如果使用特定字符表示包结束,那么……用ByteArrayOutputStream来构造byte数组吧,别直接创建byte[]了。疑问:从这段代码来看,你的DataInputStream是没必要的,和直接从socket的getInputStream()得到的流读数据没有任何区别。