我在读取是二进制的文件时读出来的数据和文件的不一样,不知道是什么原因             File file = new File(dir); 
        int size = (int) file.length(); 
         byte[] buf = new byte[size];
            fis = new FileInputStream(file);
        //dis = new DataInputStream(fis);
        while(fis.read(buf) != -1)
        {
        }
            for(int i =0;i< 32;i ++)
        {
        Log.d("data"+i,""+buf[i]);
        }本来源文件的二进制数据是 1 128 0 51 170 99 42 20....
但读出来的数据是 1 -128 0 51 -86 99 42 20....为什么出现这种情况?有什么办法解决?

解决方案 »

  1.   

    来个人帮忙啊·我是java新手啊·
      

  2.   

    原来JAVA的byte型的取值范围是-128 到127之间
      

  3.   

    byte是单字节的,也就是从-128~127,但是文本的数据是会超过127的,所以读到byte里就强转了,出现超过127的变为负数的情况,不知道读出来的buffer是干什么用的,如果要保存为正确的值,可以在 Log.d("data"+i,""+buf[i]);这里将buf做判断,127+负的值,就是可以了,赋给int。
    或者直接将buf 转成char型也可以,char是两个字节的。
      

  4.   

    这个数据是一致的嘛!byte类型下128和-128的二进制表示是相同的,因为你用的byte类型是有符号的,所以128被解释为负数,如果用无符号类型,则解释为正数128假定sbyte为有符号byte类型,值域为-128~127,ubyte为无符号byte类型,值域为0~255
    sbyte的下半个值域-128~-1,与ubyte的上半个值域128~255,是一一对应的,sbyte的-128对应于ubyte的128,sbyte的-1对应于ubyte的255,依此类推
    sbyte的上半个值域0~127,与ubyte的下半个值域0~127,同样一一对应,这个显然知道整数的二进制补码表示后,这个问题就是显然的