Почему RandomAccessFile использует int как смещение - PullRequest
3 голосов
/ 04 февраля 2010

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

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)

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

1 Ответ

15 голосов
/ 04 февраля 2010

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

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

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

...