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

C#的BinaryWriter和Java的DataInputStream之间的数据相互转换
开发的时候发现,C#写入的字节顺序是从低到高(左低到右高),而Java的DataInputStream读取的数据是从高到低(左高到右低),所以当我们要用Java读取C#生成的二进制文件的时候,需要将DataInputStream里面的几个方法重写或者写一些辅助方法,例如下面两个函数是用来读取C#写入的无符号Short型和无符号长整型数据。 
/**
     * 逆转字节数组
     * 
     * 
@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));
    }


---------------------------------------------------------
专注移动开发
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian

你可能感兴趣的:(C#的BinaryWriter和Java的DataInputStream之间的数据相互转换)