文件里表示日期四个字节的数据,D6 CD 2F 01转换为十进制是:19910102 
经过jiangnaisong解答,Intel CPU下存的二进制文件,则文件中字节次序是:01 2F CD D6
01 2F CD D6 转化过来的确是19910102
可是如果文件里的次序是D6 CD 2F 01该怎么读取呢。我运行以下程序结果是
run:
date:-691196159望解惑
        DataInputStream dis = new DataInputStream(new FileInputStream("D:/data.bin"));
        int v=dis.readInt();
        dis.close();
        String date=""+v;
        System.out.println("date:"+date);

解决方案 »

  1.   

    答:
    1)JAVA全是按Big-Endian方法读取/写入数据的(即:与本地机器方式无关).在存入/读取本地文件时,再按本地方式(如:Intel CPU是Little-Endian,SUN UNIX是Big-Endian)与JAVA的Big-Endian自动进行转换.
    2)由于你的二进制文件是Big-Endian方式存入的文件,而读取的本地机器方式又是Little-Endian,因而必须要进行转换.(否则:不需要转换)
    3)如何转换?方式很多,我只提供一种:
    代码片断:
                    ByteBuffer bf=ByteBuffer.allocate(4);//4个字节的buf(若数据量大,就开大一点)
    DataInputStream dis=new DataInputStream(new FileInputStream("c:/date.bin"));
    int v=dis.readInt();
    dis.close();
    bf.putInt(v);//将一大批数据按默认大头依次写入
    bf.order(ByteOrder.LITTLE_ENDIAN);//强制LITTLE_ENDIAN
    String date=""+bf.getInt(0);//将一大批数据按小头方式读入
    System.out.println("date:"+date);
    c:/date.bin文件中四个字节是大头次序:D6 CD 2F 01,在Intel CPU机器上(小头方式的机器)读取,
    运行结果:
    date:19910102
      

  2.   

    答:上边叙述可能不太清楚.归纳起来就是:JAVA总是按Big-endian方式读/取数据.
    若原数据是Big-endian方式,则没有问题.若原数据是Litle-endian方式(Intel CPU WINDOWS下的C/C++的二进制文件),则:要进行转换.