2010-03-23 36 views
9

Tôi có một mảng byte, kích cỡ n, thực sự đại diện cho một mảng có kích thước ngắn là n/2. Trước khi tôi viết mảng vào một tệp đĩa, tôi cần phải điều chỉnh các giá trị bằng cách thêm các giá trị thiên vị được lưu trữ trong một mảng ngắn khác. Trong C + +, tôi sẽ chỉ định địa chỉ của mảng byte cho một con trỏ cho một mảng ngắn với một diễn viên ngắn và sử dụng số học con trỏ hoặc sử dụng một công đoàn.Làm cách nào tôi có thể truy cập mảng byte dưới dạng quần short trong Java

Làm thế nào điều này có thể được thực hiện bằng Java - Tôi rất mới với Java BTW.

Trả lời

8

Bạn có thể bọc mảng byte bằng 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 
9

Bạn có thể tự mình làm một chút nhưng tôi khuyên bạn nên xem qua các lớp 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. 
+0

Cảm ơn, bạn và Alexander đã cung cấp cho tôi những gì tôi cần. –

+1

Bạn có thể sử dụng 'while (sb.hasRemaining())' nếu bạn muốn lặp qua tất cả chúng http://docs.oracle.com/javase/6/docs/api/java/nio/Buffer.html#hasRemaining() – Raekye

4

Cách chính xác để thực hiện việc này là sử dụng ca. Vì vậy,

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

Ngoài ra, nó còn phụ thuộc vào độ dài cuối của luồng ở nhiều khía cạnh. Điều này có thể hoạt động tốt hơn

Các vấn đề liên quan