如何在Java中将字节数组作为short进行访问

时间:2010-03-23 00:11:21

标签: java bytearray short

我有一个字节数组,大小为n,它实际上代表了一个n / 2大小的数组。在将数组写入磁盘文件之前,我需要通过添加存储在另一个short数组中的偏差值来调整值。在C ++中,我只是将字节数组的地址分配给一个短数组的指针,并使用指向算术或使用联合。

如何用Java完成 - 我是Java BTW的新手。

3 个答案:

答案 0 :(得分:9)

你可以自己做点啰嗦,但我建议你看一下ByteBufferShortBuffer类。

byte[] arr = ...
ByteBuffer bb = ByteBuffer.wrap(arr); // Wrapper around underlying byte[].
ShortBuffer sb = bb.asShortBuffer(); // Wrapper around ByteBuffer.

// Now traverse ShortBuffer to obtain each short.
short s1 = sb.get();
short s2 = sb.get(); // etc.

答案 1 :(得分:8)

您可以使用java.nio.ByteBuffer包装字节数组。

byte[] bytes = ...
ByteBuffer buffer = ByteBuffer.wrap( bytes );

// you may or may not need to do this
//buffer.order( ByteOrder.BIG/LITTLE_ENDIAN );

ShortBuffer shorts = buffer.asShortBuffer( );

for ( int i = 0, n=shorts.remaining( ); i < n; ++i ) {
    final int index = shorts.position( ) + i;

    // Perform your transformation
    final short adjusted_val = shortAdjuster( shorts.get( index ) );

    // Put value at the same index
    shorts.put( index, adjusted_val );
}

// bytes now contains adjusted short values

答案 2 :(得分:4)

执行此操作的正确方法是使用班次。所以

for (int i = 0; i < shorts.length; i++) {
    shorts[i] = (short)((bytes[2*i] << 8) | bytes[2*i + 1]);
}

此外,它在很多方面取决于流的字节序。这可能效果更好