Почему RandomAccessFile использует int в качестве смещения

StackOverflow https://stackoverflow.com/questions/2201155

Вопрос

Я пишу некоторую тестовую реализацию доступа к данным, и мне нужен произвольный доступ к содержимому файла.Вот код:

RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rwd");
final byte b[] = IOUtils.toByteArray(source);
randomAccessFile.write(b, (int) offset, size);

где смещение имеет тип long.Почему RandomAccessFile не предоставляет метод:

public void write(byte b[], long off, int len)

?

Как устранить эту проблему?

Это было полезно?

Решение

Я думаю, что вы ищете seek способ.

Смещение в write является смещением в массив.Массивы имеют int смещения.Были предложения по "длинным массивам", но если бы они были реализованы, вам все равно понадобилась бы перегрузка.

Сопоставленные файлы в NIO имеют проблему в том, что эквивалентный MappedByteBuffer.position по какой-то причине использует только int.Видишь CR 6347833 (9 голосов).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top