package code.kalter.longflight; /** * Удобное чтение разных типов с байтового массива * * @author KalterFive */ public class ByteArrayInputStream { private final byte[] array; private int position; public ByteArrayInputStream(byte[] array) { this.array = array; position = 0; } public byte readByte() { return array[position++]; } public short readShort() { // AND для того, чтобы читать байт без знака final short a = (short) (readByte() & 0x00FF); final short b = (short) (readByte() & 0x00FF); return (short) ((a << 8) | b); } public int readInteger() { final int a = readShort(); final int b = readShort(); return (int) ((a << 16) | b); } public long readLong() { final long a = readInteger(); final long b = readInteger(); return (long) ((a << 32) | b); } public byte[] toByteArray(int size) { final byte[] array = new byte[size]; for (int i = 0; i < size; i++) { array[i] = readByte(); } return array; } public short[] toShortArray(int size) { final short[] array = new short[size]; for (int i = 0; i < size; i++) { array[i] = readShort(); } return array; } public int[] toIntArray(int size) { final int[] array = new int[size]; for (int i = 0; i < size; i++) { array[i] = readInteger(); } return array; } public long[] toLongArray(int size) { final long[] array = new long[size]; for (int i = 0; i < size; i++) { array[i] = readLong(); } return array; } }