Почему RandomAccessFile использует int в качестве смещения
-
18-09-2019 - |
Вопрос
Я пишу некоторую тестовую реализацию доступа к данным, и мне нужен произвольный доступ к содержимому файла.Вот код:
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 голосов).
Не связан с StackOverflow