Почему Java Gathering Write with Offset не существует?

FileChannel в Java поддерживает запись из массива буферов в канал при записи записи с помощью int write(ByteBuffer[] src).

Однако он не поддерживает аналог метода записи со смещением write(ByteBuffer src, long position). Похоже, что нет способа выполнить запись по указанному смещению без блокировки канала, изменения позиции, записи в эту позицию, а затем разблокировки канала.

Похоже, что в конечном итоге java использует системный вызов writev для выполнения сбор пишет. Команда pwritev, по-видимому, делает именно то, что нужно и от нее ожидается.

Есть ли веская причина, по которой нет метода записи со смещением? Есть ли библиотеки, которые это реализуют?


person tvoss    schedule 31.12.2015    source источник
comment
Любопытно: зачем тебе это нужно?   -  person Pétur Ingi Egilsson    schedule 31.12.2015
comment
Хотелось бы устранить буферные копии для повышения производительности, используя сбор записей, но я пишу со смещением в файле, и блокировка канала при каждой записи может быть неприемлемой.   -  person tvoss    schedule 31.12.2015


Ответы (1)


Это существует, но с дополнительным параметром, чтобы сделать его еще более общим.

person user207421    schedule 31.12.2015
comment
Несмотря на имена параметров, это фактически не записывается в смещение внутри канала. Вместо этого указанное смещение относится к буферному массиву, а не к положению внутри канала для записи. - person tvoss; 31.12.2015