Сразу прочитать массив целых чисел из RandomAccessFile

Я пытаюсь прочитать массив целых чисел из RandomAccessFile. Однако RandomAccessFile поддерживает только чтение массива байтов. Мой код до сих пор:

public long getSumOfElementsFromArray(long start, int length)
{
    int[] tempArray = new int[length];
    try
    {
        RAF.seek(start);
        RAF.readFully( (byte[]) (tempArray) , 0, length*4);
        //do some stuff with tempArray
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
    return 0;
}

Eclipse говорит мне: «Невозможно преобразовать из int [] в byte []». В C я мог бы легко преобразовать int* в char*, но я не знаю, как это делается в Java. Как я мог сделать это на Java?


person VoidStar    schedule 13.05.2013    source источник


Ответы (2)


Вы можете использовать ByteBuffer. Прочитайте как byteArray, а затем конвертируйте.

int[] tempArray = ByteBuffer.wrap(byteArray).asIntBuffer().array();

Проверьте похожий вопрос.

person basiljames    schedule 13.05.2013

Вы пробовали readInt метод, например:

    for (int i = 0; i < tempArray.length; i++) {
            tempArray[i] = RAF.readInt();
    }

если вы приводите int[] к byte[], это не разрешено, так как происходит потеря информации, поэтому (byte[])tempArray не разрешено.

Метод принимает параметр byte[], а не int[], поэтому не может напрямую передавать int[]. В случае типа массива расширение не допускается, а без массива вы можете сделать как передать байт, пока метод принимает целое число.

person vishal_aim    schedule 13.05.2013
comment
Я тоже об этом думал, но не будет ли чтение сразу быстрее, чем чтение тысяч целых чисел друг за другом? Почему происходит потеря информации? Int состоит из 4 байтов, поэтому он должен работать. - person VoidStar; 13.05.2013
comment
@Machtl прояснил больше, проверьте сейчас. - person vishal_aim; 13.05.2013