byte数组如何转为short数组

最近在搞毕业设计,做的是有关语音识别的手机应用。在处理音频的过程中,发现需要用short数组处理音频,可能光用byte会越界。但是java读文件没有一次性读到short数组中的api,要么是一个一个读short,要么读到byte数组后人工转为short数组。前者的行为和c++行为正好相反,主要是高低位问题,所以只能采取后者。

见代码:

  
    
public short [] byteArray2ShortArray( byte [] data, int items) {
  
short [] retVal = new short [items];
  
for ( int i = 0 ; i < retVal.length; i ++ )
  retVal[i]
= ( short ) ((data[i * 2 ] & 0xff ) | (data[i * 2 + 1 ] & 0xff ) << 8 );

  
return retVal;
}
虽然如今代码执行是对的,但是注意的是,data元素取出来后要先和0xff按位与一下,否则出来的结果又三分之一不到都是不对的。具体什么原因,请大神给予指点!

你可能感兴趣的:(byte)