package com.nokia.common.io;

import java.nio.ByteBuffer;

/**
 * 整数和字节数组相互转化的工具类
 */
public class ByteArrayUtil {

    /**
     * 从buffer的从offset开始的4个字节中读取一个Integer
     */
    public static int parseInteger(byte[] buffer, int offset) {
        // 识别
        byte[] byteArr = new byte[4];
        int size = buffer.length - offset;
        if (size >= 4) {
            System.arraycopy(buffer, offset, byteArr, 0, 4);
        } else {
            System.arraycopy(buffer, offset, byteArr, 4 - size, size);
        }

        return ByteBuffer.wrap(byteArr).getInt();
    }

    /**
     * 从buffer的从offset开始的4个字节中读取一个无符号整数，以long的类型返回
     */
    public static long parseUnsignedInteger(byte[] buffer, int offset) {
        // 识别
        byte[] byteArr = new byte[8];
        int size = buffer.length - offset;
        if (size >= 4) {
            System.arraycopy(buffer, offset, byteArr, 4, 4);
        } else {
            System.arraycopy(buffer, offset, byteArr, 8 - size, size);
        }

        return ByteBuffer.wrap(byteArr).getLong();
    }

    /**
     * 把int转化成4字节数组
     */
    public static byte[] toByteArray(int value) {
        ByteBuffer buffer = ByteBuffer.allocate(4);
        buffer.putInt(value);
        return buffer.array();
    }

    /*
     * 把long转成8字节数组
     */
    public static byte[] toByteArray(long value) {
        ByteBuffer buffer = ByteBuffer.allocate(8);
        buffer.putLong(value);
        return buffer.array();
    }
}
