C#的BinaryWriter和Java的DataInputStream之间的数据相互转换

/**
     * 逆转字节数组
     * 
     * @param b
     * @return
     */
    private static byte[] reverse(byte[] b) {

        byte[] temp = new byte[b.length];
        for (int i = 0; i < b.length; i++) {
            temp[i] = b[b.length - 1 - i];
        }
        return temp;
    }

    /**
     * 读取无符号位的Short数,16位
     * 
     * @param readBuffer
     * @return
     * @throws IOException
     */
    public static final BigInteger readUnsignedShort(byte[] readBuffer)
            throws IOException {
        if (readBuffer == null || readBuffer.length < 2)
            return new BigInteger("0");
        // 处理成无符号数
        byte[] uint64 = new byte[3];
        uint64[2] = 0;
        System.arraycopy(readBuffer, 0, uint64, 0, 2);
        return new BigInteger(reverse(uint64));
    }

    /**
     * 读取无符号位的长整数,64位
     * 
     * @param readBuffer
     * @return
     * @throws IOException
     */
    public static final BigInteger readUnsignedInt64(byte[] readBuffer)
            throws IOException {
        if (readBuffer == null || readBuffer.length < 8)
            return new BigInteger("0");
        // 处理成无符号数
        byte[] uint64 = new byte[9];
        uint64[8] = 0;
        System.arraycopy(readBuffer, 0, uint64, 0, 8);
        return new BigInteger(reverse(uint64));
    }

 

开发的时候发现,C#写入的字节顺序是从低到高(左低到右高),而Java的DataInputStream读取的数据是从高到低(左高到右低),所以当我们要用Java读取C#生成的二进制文件的时候,需要将DataInputStream里面的几个方法重写或者写一些辅助方法,例如下面两个函数是用来读取C#写入的无符号Short型和无符号长整型数据。 

posted @ 2013-03-14 23:27  therockthe  阅读(2016)  评论(0)    收藏  举报