Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class FileChannel extends AbstractInterruptibleChannel implements SeekableByteChannel, GatheringByteChannel, ScatteringByteChannel
Канал файла является a SeekableByteChannel
это соединяется с файлом. У этого есть текущая позиция в пределах ее файла, который может быть обоими queried
и modified
. Сам файл содержит последовательность переменной длины байтов, которые могут быть считаны и записаны и чей ток size
может быть запрошен. Размер файла увеличивается, когда байты пишутся вне его текущего размера; размер файла уменьшается, когда это усеченный
. У файла могут также быть некоторые связанные метаданные, такие как права доступа, тип контента, и время последнего изменения; этот класс не определяет методы для доступа метаданных.
В дополнение к знакомому чтению запишите, и операции закрытия каналов байта, этот класс определяет следующие специфичные для файла операции:
Байты могут быть read
или written
в абсолютной позиции в файле в пути, который не влияет на текущую позицию канала.
Область файла может быть mapped
непосредственно в память; для больших файлов это часто намного более эффективно чем вызов обычных методов read ИЛИ write.
Обновления, сделанные к файлу, могут быть forced out
к базовому устройству хранения данных, гарантируя, что данные не теряются в случае системного катастрофического отказа.
Байты могут быть переданы от файла to some other channel
, и vice versa
, в пути, который может быть оптимизирован многими операционными системами в очень быструю передачу непосредственно в или от кэша файловой системы.
Область файла может быть locked
против доступа другими программами.
Каналы файла безопасны для использования многократными параллельными потоками. close
метод может быть вызван в любое время, как определено Channel
интерфейс. Только одна работа, которая включает позицию канала или может изменить размер ее файла, может произойти в любой момент времени; попытки инициировать секунду, которую такая работа, в то время как первое все еще происходит, блокирует до первой работы, завершаются. Другие операции, в особенности те, которые занимают явную позицию, могут продолжить одновременно; делают ли они фактически так зависит от базовой реализации и является поэтому неуказанным.
Представление файла, обеспеченного экземпляром этого класса, как гарантируют, будет непротиворечивым с другими представлениями того же самого файла, обеспеченного другими экземплярами в той же самой программе. Представление, обеспеченное экземпляром этого класса, может или, возможно, не, однако, является непротиворечивым с представлениями, замеченными другими одновременно рабочими программами из-за кэширования выполняемого базовой операционной системой и задержками, вызванными протоколами сетевой файловой системы. Это - истина независимо от языка, на котором эти другие программы пишутся, и работают ли они на той же самой машине или на некоторой другой машине. Точный характер любых таких несогласованностей является системно-зависимым и является поэтому неуказанным.
Канал файла создается, вызывая один из open
методы определяются этим классом. Канал файла может также быть получен из существующего FileInputStream
, FileOutputStream
, или RandomAccessFile
объект, вызывая, что метод getChannel объекта, который возвращает канал файла, который соединяется с тем же самым базовым файлом. Где канал файла получается из существующего потока или файла произвольного доступа тогда, состояние канала файла глубоко соединяется с тем из объекта чей метод getChannel, возвращенный канал. Изменение позиции канала, или явно или читая или при записи байтов, изменит позицию файла инициирующего объекта, и наоборот. Изменение длины файла через канал файла изменит длину, замеченную через инициирующий объект, и наоборот. Изменение контента файла при записи байтов изменит контент, замеченный инициирующим объектом, и наоборот.
В различных точках этот класс определяет, что экземпляр, который "открыт для того, чтобы читать," "открытый для того, чтобы записать," или "открытый для чтения и записи" требуется. Канал, полученный через getChannel
метод a FileInputStream
экземпляр будет открыт для того, чтобы читать. Канал, полученный через getChannel
метод a FileOutputStream
экземпляр будет открыт для того, чтобы записать. Наконец, канал, полученный через getChannel
метод a RandomAccessFile
экземпляр будет открыт для того, чтобы читать, если экземпляр создавался с режимом "r" и будет открыт для чтения и записи, если экземпляр создавался с режимом "rw".
Канал файла, который открыт для того, чтобы записать, может быть в, добавляют режим, например если это было получено из потока вывода файла, который создавался, вызывая FileOutputStream(File,boolean)
конструктор и передача true для второго параметра. В этом режиме каждый вызов относительной операции записи первые усовершенствования позиция до конца файла и затем пишет запрошенные данные. Делаются ли продвижение позиции и запись данных в единственной атомарной работе, является системно-зависимым и поэтому неуказанным.
FileInputStream.getChannel()
, FileOutputStream.getChannel()
, RandomAccessFile.getChannel()
Модификатор и Тип | Класс и Описание |
---|---|
static class |
FileChannel. MapMode
Безопасное с точки зрения типов перечисление для режимов отображения файла.
|
Модификатор | Конструктор и Описание |
---|---|
protected |
FileChannel()
Инициализирует новый экземпляр этого класса.
|
Модификатор и Тип | Метод и Описание |
---|---|
abstract void |
force(boolean metaData)
Силы любые обновления к файлу этого канала, который будет записан устройству хранения данных, которое содержит это.
|
FileLock |
lock()
Получает монопольную блокировку на файле этого канала.
|
abstract FileLock |
lock(long position, long size, boolean shared)
Получает блокировку на данной области файла этого канала.
|
abstract MappedByteBuffer |
map(FileChannel.MapMode mode, long position, long size)
Отображает область файла этого канала непосредственно в память.
|
static FileChannel |
open(Path path, OpenOption... options)
Открывает или создает файл, возвращая канал файла, чтобы получить доступ к файлу.
|
static FileChannel |
open(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs)
Открывает или создает файл, возвращая канал файла, чтобы получить доступ к файлу.
|
abstract long |
position()
Возвраты позиция файла этого канала.
|
abstract FileChannel |
position(long newPosition)
Наборы позиция файла этого канала.
|
abstract int |
read(ByteBuffer dst)
Читает последовательность байтов от этого канала в данный буфер.
|
long |
read(ByteBuffer[] dsts)
Читает последовательность байтов от этого канала в данные буферы.
|
abstract long |
read(ByteBuffer[] dsts, int offset, int length)
Читает последовательность байтов от этого канала в подпоследовательность данных буферов.
|
abstract int |
read(ByteBuffer dst, long position)
Читает последовательность байтов от этого канала в данный буфер, запускающийся в данной позиции файла.
|
abstract long |
size()
Возвращает текущий размер файла этого канала.
|
abstract long |
transferFrom(ReadableByteChannel src, long position, long count)
Байты передач в файл этого канала от данного читаемого канала байта.
|
abstract long |
transferTo(long position, long count, WritableByteChannel target)
Байты передач от файла этого канала до данного перезаписываемого канала байта.
|
abstract FileChannel |
truncate(long size)
Усекает файл этого канала к данному размеру.
|
FileLock |
tryLock()
Попытки получить монопольную блокировку на файле этого канала.
|
abstract FileLock |
tryLock(long position, long size, boolean shared)
Попытки получить блокировку на данной области файла этого канала.
|
abstract int |
write(ByteBuffer src)
Пишет последовательность байтов к этому каналу от данного буфера.
|
long |
write(ByteBuffer[] srcs)
Пишет последовательность байтов к этому каналу от данных буферов.
|
abstract long |
write(ByteBuffer[] srcs, int offset, int length)
Пишет последовательность байтов к этому каналу от подпоследовательности данных буферов.
|
abstract int |
write(ByteBuffer src, long position)
Пишет последовательность байтов к этому каналу от данного буфера, запускающегося в данной позиции файла.
|
begin, close, end, implCloseChannel, isOpen
protected FileChannel()
public static FileChannel open(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException
options
параметр определяет, как файл открывается. READ
и WRITE
опции определяют, должен ли файл быть открыт для чтения и/или записи. Если никакая опция (или APPEND
опция), содержится в массиве тогда, файл открывается для того, чтобы читать. Чтением по умолчанию или записью начинается в начале файла.
В дополнении к READ
и WRITE
, следующие опции могут присутствовать:
Опция | Описание |
---|---|
APPEND |
Если эта опция присутствует тогда, файл открывается для записи и каждого вызова канала write метод первые усовершенствования позиция до конца файла и затем пишет запрошенные данные. Делаются ли продвижение позиции и запись данных в единственной атомарной работе, является системно-зависимым и поэтому неуказанным. Эта опция не может использоваться в соединении с READ или TRUNCATE_EXISTING опции. |
TRUNCATE_EXISTING |
Если эта опция присутствует тогда, существующий файл является усеченным к размеру 0 байтов. Эта опция игнорируется, когда файл открывается только для того, чтобы читать. |
CREATE_NEW |
Если эта опция присутствует тогда, новый файл создается, перестав работать, если файл уже существует. Создавая файл проверка на существование файла и создание файла, если это не существует, являются атомарными относительно других операций файловой системы. Эта опция игнорируется, когда файл открывается только для того, чтобы читать. |
CREATE |
Если эта опция присутствует тогда, существующий файл открывается, если это существует, иначе создается новый файл. Создавая файл проверка на существование файла и создание файла, если это не существует, являются атомарными относительно других операций файловой системы. Эта опция игнорируется если CREATE_NEW опция также присутствует, или файл открывается только для того, чтобы читать. |
DELETE_ON_CLOSE |
Когда эта опция присутствует тогда, реализация предпринимает попытку максимальных усилий удалить файл когда закрыто close метод. Если close метод не вызывается тогда, попытка максимальных усилий предпринимается, чтобы удалить файл, когда виртуальная машина Java завершается. |
SPARSE |
Создавая новый файл эта опция является подсказкой, что новый файл будет редок. Эта опция игнорируется, если не создавая новый файл. |
SYNC |
Требует, чтобы каждое обновление к контенту файла или метаданным было записано синхронно базовому устройству хранения данных. (см., Синхронизировал целостность файла ввода-вывода). |
DSYNC |
Требует, чтобы каждое обновление к контенту файла было записано синхронно базовому устройству хранения данных. (см., Синхронизировал целостность файла ввода-вывода). |
Реализация может также поддерживать дополнительные опции.
attrs
параметр является дополнительным массивом файла file-attributes
установить атомарно, создавая файл.
Новый канал создается, вызывая newFileChannel
метод на провайдере, который создал Path
.
path
- Путь файла, чтобы открыться или создатьoptions
- Опции, определяющие, как файл открываетсяattrs
- Дополнительный список атрибутов файла, чтобы установить атомарно, создавая файлIllegalArgumentException
- Если набор содержит недопустимую комбинацию опцийUnsupportedOperationException
- Если path
связывается с провайдером, который не поддерживает каналы файла создания, или неподдерживаемая открытая опция определяется, или массив содержит атрибут, который не может быть установлен атомарно, создавая файлIOException
- Если ошибка ввода-вывода происходитSecurityException
- Если менеджер безопасности устанавливается, и он отрицает неуказанное разрешение, требуемое реализацией. В случае провайдера по умолчанию, SecurityManager.checkRead(String)
метод вызывается, чтобы проверить доступ для чтения, если файл открывается для того, чтобы читать. SecurityManager.checkWrite(String)
метод вызывается, чтобы проверить доступ для записи, если файл открывается для того, чтобы записатьpublic static FileChannel open(Path path, OpenOption... options) throws IOException
Вызов этого метода ведет себя точно таким же образом как вызов
fc.open
(file, opts, new FileAttribute<?>[0]);
где opts
ряд опций, определенных в options
массив.path
- Путь файла, чтобы открыться или создатьoptions
- Опции, определяющие, как файл открываетсяIllegalArgumentException
- Если набор содержит недопустимую комбинацию опцийUnsupportedOperationException
- Если path
связывается с провайдером, который не поддерживает каналы файла создания, или неподдерживаемая открытая опция определяетсяIOException
- Если ошибка ввода-вывода происходитSecurityException
- Если менеджер безопасности устанавливается, и он отрицает неуказанное разрешение, требуемое реализацией. В случае провайдера по умолчанию, SecurityManager.checkRead(String)
метод вызывается, чтобы проверить доступ для чтения, если файл открывается для того, чтобы читать. SecurityManager.checkWrite(String)
метод вызывается, чтобы проверить доступ для записи, если файл открывается для того, чтобы записатьpublic abstract int read(ByteBuffer dst) throws IOException
Байты читаются, запускаясь в текущей позиции файла этого канала, и затем позиция файла обновляется с числом байтов фактически чтение. Иначе этот метод ведет себя точно как определено в ReadableByteChannel
интерфейс.
read
в интерфейсе ReadableByteChannel
read
в интерфейсе SeekableByteChannel
dst
- Буфер, в который должны быть переданы байтыClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException
Байты читаются, запускаясь в текущей позиции файла этого канала, и затем позиция файла обновляется с числом байтов фактически чтение. Иначе этот метод ведет себя точно как определено в ScatteringByteChannel
интерфейс.
read
в интерфейсе ScatteringByteChannel
dsts
- Буферы, в которые должны быть переданы байтыoffset
- Смещение в пределах буферного массива первого буфера, в который должны быть переданы байты; должно быть неотрицательным и не больше чем dsts.lengthlength
- Максимальное количество буферов, которые будут получены доступ; должно быть неотрицательным и не больше чем dsts.length - offsetClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic final long read(ByteBuffer[] dsts) throws IOException
Байты читаются, запускаясь в текущей позиции файла этого канала, и затем позиция файла обновляется с числом байтов фактически чтение. Иначе этот метод ведет себя точно как определено в ScatteringByteChannel
интерфейс.
read
в интерфейсе ScatteringByteChannel
dsts
- Буферы, в которые должны быть переданы байтыClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract int write(ByteBuffer src) throws IOException
Байты пишутся, запускаясь в текущей позиции файла этого канала, если канал не находится в, добавляют режим, когда позиция сначала совершенствуется до конца файла. Файл выращивается, в случае необходимости, чтобы разместить записанные байты, и затем позиция файла обновляется с числом байтов, фактически записанных. Иначе этот метод ведет себя точно как определено WritableByteChannel
интерфейс.
write
в интерфейсе SeekableByteChannel
write
в интерфейсе WritableByteChannel
src
- Буфер, от которого должны быть получены байтыClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция записи происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция записи происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException
Байты пишутся, запускаясь в текущей позиции файла этого канала, если канал не находится в, добавляют режим, когда позиция сначала совершенствуется до конца файла. Файл выращивается, в случае необходимости, чтобы разместить записанные байты, и затем позиция файла обновляется с числом байтов, фактически записанных. Иначе этот метод ведет себя точно как определено в GatheringByteChannel
интерфейс.
write
в интерфейсе GatheringByteChannel
srcs
- Буферы, от которых должны быть получены байтыoffset
- Смещение в пределах буферного массива первого буфера, от которого должны быть получены байты; должно быть неотрицательным и не больше чем srcs.lengthlength
- Максимальное количество буферов, которые будут получены доступ; должно быть неотрицательным и не больше чем srcs.length - offsetClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция записи происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция записи происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic final long write(ByteBuffer[] srcs) throws IOException
Байты пишутся, запускаясь в текущей позиции файла этого канала, если канал не находится в, добавляют режим, когда позиция сначала совершенствуется до конца файла. Файл выращивается, в случае необходимости, чтобы разместить записанные байты, и затем позиция файла обновляется с числом байтов, фактически записанных. Иначе этот метод ведет себя точно как определено в GatheringByteChannel
интерфейс.
write
в интерфейсе GatheringByteChannel
srcs
- Буферы, от которых должны быть получены байтыClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция записи происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция записи происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract long position() throws IOException
position
в интерфейсе SeekableByteChannel
ClosedChannelException
- Если этот канал закрываетсяIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract FileChannel position(long newPosition) throws IOException
Установка позиции к значению, которое больше чем текущий размер файла, является законной, но не изменяет размер файла. Более поздняя попытка считать байты в такой позиции сразу возвратит индикацию конца файла. Более поздняя попытка записать байты в такой позиции заставит файл быть выращенным, чтобы разместить новые байты; значения любых байтов между предыдущим концом файла и недавно записанных байтов являются неуказанными.
position
в интерфейсе SeekableByteChannel
newPosition
- Новая позиция, неотрицательное целое число, считая число байтов с начала файлаClosedChannelException
- Если этот канал закрываетсяIllegalArgumentException
- Если новая позиция отрицательнаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract long size() throws IOException
size
в интерфейсе SeekableByteChannel
ClosedChannelException
- Если этот канал закрываетсяIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract FileChannel truncate(long size) throws IOException
Если данный размер является меньше чем текущий размер файла тогда, файл является усеченным, отбрасывая любые байты вне нового конца файла. Если данный размер больше чем или равен текущему размеру файла тогда, файл не изменяется. В любом случае, если позиция файла этого канала больше чем данный размер тогда, что это устанавливается в тот размер.
truncate
в интерфейсе SeekableByteChannel
size
- Новый размер, неотрицательное количество байтаNonWritableChannelException
- Если этот канал не был открыт для того, чтобы записатьClosedChannelException
- Если этот канал закрываетсяIllegalArgumentException
- Если новый размер отрицателенIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract void force(boolean metaData) throws IOException
Если файл этого канала находится на локальном устройстве хранения данных тогда, когда этот метод возвраты, гарантируется, что все изменения, произведенные в файле начиная с этого канала, создавались, или начиная с этого метода, был последний вызванный, будет записан тому устройству. Это полезно для обеспечения, что критическая информация не теряется в случае системного катастрофического отказа.
Если файл не находится на локальном устройстве тогда, никакая такая гарантия не делается.
Параметр metaData может использоваться, чтобы ограничить число операций ввода-вывода, которые этот метод обязан выполнять. Передача false для этого параметра указывает, что только обновляет к потребности контента файла быть записанным хранению; передача true указывает, что обновления и к контенту файла и к метаданным должны быть записаны, который обычно требует, по крайней мере, еще одной работы ввода-вывода. Имеет ли этот параметр фактически какой-либо эффект, зависит от базовой операционной системы и является поэтому неуказанным.
Вызов этого метода может заставить работу ввода-вывода происходить, даже если канал был только открыт для того, чтобы читать. Некоторые операционные системы, например, поддерживают последнее время доступа как часть метаданных файла, и это время обновляется всякий раз, когда файл читается. Делается ли это фактически, системно-зависимое и является поэтому неуказанным.
Этот метод, как только гарантируют, вызовет изменения, которые были произведены в файле этого канала через методы, определенные в этом классе. Это может или, возможно, не вызывает изменения, которые были произведены, изменяя контент a mapped byte buffer
полученный, вызывая map
метод. Вызов force
метод отображенного буфера байта вынудит изменения, произведенные в контенте буфера быть записанными.
metaData
- Если true тогда этот метод обязан вынуждать изменения и к контенту файла и к метаданным быть записанными хранению; иначе, это должно только вынудить изменения контента быть записаннымиClosedChannelException
- Если этот канал закрываетсяIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract long transferTo(long position, long count, WritableByteChannel target) throws IOException
Попытка предпринимается, чтобы читать до байтов count, запускающихся в данном position в файле этого канала и записать им в целевой канал. Вызов этого метода может или, возможно, не передает все требуемые байты; делает ли это так зависит от природы и состояний каналов. Меньше чем требуемое число байтов передаются, если файл этого канала содержит меньше чем байты count, запускающиеся в данном position, или если целевой канал неблокирует, и у этого есть меньше чем байты count, свободные в его буфере вывода.
Этот метод не изменяет позицию этого канала. Если данная позиция больше чем текущий размер файла тогда, никакие байты не передаются. Если у целевого канала есть позиция тогда, байты пишутся, запускаясь в той позиции, и затем позиция постепенно увеличивается числом записанных байтов.
Этот метод потенциально намного более эффективен чем простой цикл, который читает из этого канала и пишет в целевой канал. Много операционных систем могут передать байты непосредственно от кэша файловой системы до целевого канала без того, чтобы фактически копировать их.
position
- Позиция в пределах файла, в котором должна начаться передача; должно быть неотрицательнымcount
- Максимальное количество байтов, которые будут переданы; должно быть неотрицательнымtarget
- Целевой каналIllegalArgumentException
- Если предварительные условия на параметрах не содержатNonReadableChannelException
- Если этот канал не был открыт для того, чтобы читатьNonWritableChannelException
- Если целевой канал не был открыт для того, чтобы записатьClosedChannelException
- Если или этот канал или целевой канал закрываютсяAsynchronousCloseException
- Если другой поток закрывает любой канал, в то время как передача происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как передача происходит, таким образом закрывая оба канала и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract long transferFrom(ReadableByteChannel src, long position, long count) throws IOException
Попытка предпринимается, чтобы читать до байтов count из источника, образовывают канал и пишут им в файл этого канала, запускающийся в данном position. Вызов этого метода может или, возможно, не передает все требуемые байты; делает ли это так зависит от природы и состояний каналов. Меньше чем требуемое число байтов будут переданы, если у исходного канала будут меньше чем остающиеся байты count, или если исходный канал неблокирует и имеет меньше чем байты count, сразу доступные в его входном буфере.
Этот метод не изменяет позицию этого канала. Если данная позиция больше чем текущий размер файла тогда, никакие байты не передаются. Если у исходного канала есть позиция тогда, байты читаются, запускаясь в той позиции, и затем позиция постепенно увеличивается числом чтения байтов.
Этот метод потенциально намного более эффективен чем простой цикл, который читает из исходного канала и записей к этому каналу. Много операционных систем могут передать байты непосредственно от исходного канала в кэш файловой системы без того, чтобы фактически копировать их.
src
- Исходный каналposition
- Позиция в пределах файла, в котором должна начаться передача; должно быть неотрицательнымcount
- Максимальное количество байтов, которые будут переданы; должно быть неотрицательнымIllegalArgumentException
- Если предварительные условия на параметрах не содержатNonReadableChannelException
- Если исходный канал не был открыт для того, чтобы читатьNonWritableChannelException
- Если этот канал не был открыт для того, чтобы записатьClosedChannelException
- Если или этот канал или исходный канал закрываютсяAsynchronousCloseException
- Если другой поток закрывает любой канал, в то время как передача происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как передача происходит, таким образом закрывая оба канала и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract int read(ByteBuffer dst, long position) throws IOException
Этот метод работает тем же самым способом read(ByteBuffer)
метод, за исключением того, что байты читаются, запускаясь в данной позиции файла, а не в текущей позиции канала. Этот метод не изменяет позицию этого канала. Если данная позиция больше чем текущий размер файла тогда, никакие байты не читаются.
dst
- Буфер, в который должны быть переданы байтыposition
- Позиция файла, в которой должна начаться передача; должно быть неотрицательнымIllegalArgumentException
- Если позиция отрицательнаNonReadableChannelException
- Если этот канал не был открыт для того, чтобы читатьClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция чтения происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция чтения происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract int write(ByteBuffer src, long position) throws IOException
Этот метод работает тем же самым способом write(ByteBuffer)
метод, за исключением того, что байты пишутся, запускаясь в данной позиции файла, а не в текущей позиции канала. Этот метод не изменяет позицию этого канала. Если данная позиция будет больше чем текущий размер файла тогда, то файл будет выращен, чтобы разместить новые байты; значения любых байтов между предыдущим концом файла и недавно записанных байтов являются неуказанными.
src
- Буфер, от которого должны быть переданы байтыposition
- Позиция файла, в которой должна начаться передача; должно быть неотрицательнымIllegalArgumentException
- Если позиция отрицательнаNonWritableChannelException
- Если этот канал не был открыт для того, чтобы записатьClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как операция записи происходитClosedByInterruptException
- Если другой поток прерывает текущий поток, в то время как операция записи происходит, таким образом закрывая канал и устанавливая состояние прерывания текущего потокаIOException
- Если некоторая другая ошибка ввода-вывода происходитpublic abstract MappedByteBuffer map(FileChannel.MapMode mode, long position, long size) throws IOException
Область файла может быть отображена в память в одном из трех режимов:
Только для чтения: Любая попытка изменить получающийся буфер вызовет a ReadOnlyBufferException
быть брошенным. (MapMode.READ_ONLY
)
Чтение-запись: Изменения, произведенные в получающемся буфере, будут в конечном счете распространены к файлу; они могут или не могут быть сделаны видимыми к другим программам, которые отобразили тот же самый файл. (MapMode.READ_WRITE
)
Частный: Изменения, произведенные в получающемся буфере, не будут распространены к файлу и не будут видимы к другим программам, которые отобразили тот же самый файл; вместо этого, они заставят частные копии измененных частей буфера создаваться. (MapMode.PRIVATE
)
Для отображения только для чтения этот канал, должно быть, был открыт для того, чтобы читать; для чтения-записи или частного отображения, этот канал, должно быть, был открыт и для чтения и для записи.
mapped byte buffer
возвращенный этим методом будет иметь позицию нуля и предела и емкости size; его метка будет неопределена. Буфер и отображение, которое это представляет, останутся допустимыми, пока сам буфер не будет собран "мусор".
Отображение, когда-то установленное, не зависит от канала файла, который использовался, чтобы создать его. Закрытие канала, в частности не имеет никакого эффекта на законность отображения.
Многие из деталей отображенных на память файлов по сути зависят от базовой операционной системы и являются поэтому неуказанными. Поведение этого метода, когда требуемая область не полностью содержится в пределах файла этого канала, является неуказанным. Распространяются ли изменения, произведенные в контенте или размере базового файла, этой программой или другим, к буферу, является неуказанным. Уровень, на котором изменения к буферу распространяются к файлу, является неуказанным.
Для большинства операционных систем, отображая файл в память более дорого чем чтение или запись нескольких десятков килобайтов данных через обычное read
и write
методы. С точки зрения производительности это обычно только стоит отобразить относительно большие файлы в память.
mode
- Одна из констант READ_ONLY
, READ_WRITE
, или PRIVATE
определенный в FileChannel.MapMode
класс, согласно тому, должен ли файл быть отображен только для чтения, чтение-запись, или конфиденциально (копия на записи), соответственноposition
- Позиция в пределах файла, в котором должна запуститься отображенная область; должно быть неотрицательнымsize
- Размер области, которая будет отображена; должно быть неотрицательным и не больше чем Integer.MAX_VALUE
NonReadableChannelException
- Если mode READ_ONLY
но этот канал не был открыт для того, чтобы читатьNonWritableChannelException
- Если mode READ_WRITE
или PRIVATE
но этот канал не был открыт и для чтения и для записиIllegalArgumentException
- Если предварительные условия на параметрах не содержатIOException
- Если некоторая другая ошибка ввода-вывода происходитFileChannel.MapMode
, MappedByteBuffer
public abstract FileLock lock(long position, long size, boolean shared) throws IOException
Вызов этого метода блокирует, пока область не может быть заблокирована, этот канал закрывается, или поток вызова прерывается, какой бы ни на первом месте.
Если этот канал закрывается другим потоком во время вызова этого метода тогда AsynchronousCloseException
будет брошен.
Если поток вызова будет прерван, ожидая, чтобы получить блокировку тогда, то ее состояние прерывания будет установлено и a FileLockInterruptionException
будет брошен. Если состояние прерывания invoker устанавливается, когда этот метод вызывается тогда, что исключение будет сразу выдано; состояние прерывания потока не будет изменено.
Область, определенная position и параметрами size, не должна содержаться в пределах, или даже наложиться, фактический базовый файл. Области блокировки фиксируются в размере; если заблокированная область первоначально будет содержать конец файла, и файл растет вне области тогда, то новая часть файла не будет покрыта блокировкой. Если файл, как ожидают, вырастет в размере, и блокировка на всем файле требуется тогда должна быть заблокирована, область, запускающаяся в нуле, и не меньший чем ожидаемый максимальный размер файла. Нулевой параметр lock()
метод просто блокирует область размера Long.MAX_VALUE
.
Некоторые операционные системы не поддерживают коллективные блокировки, когда запрос на коллективную блокировку автоматически преобразовывается в запрос на монопольную блокировку. Совместно используется ли недавно полученная блокировка или монопольная, может быть протестирован, вызывая получающийся объект блокировки isShared
метод.
Блокировки файла сохранены от имени всей виртуальной машины Java. Они не являются подходящими для того, чтобы управлять доступом к файлу многократными потоками в пределах той же самой виртуальной машины.
position
- Позиция, в которой должна запуститься заблокированная область; должно быть неотрицательнымsize
- Размер заблокированной области; должно быть неотрицательным, и сумма position + , size должен быть неотрицательнымshared
- true, чтобы запросить коллективную блокировку, когда этот канал должен быть открытым для того, чтобы читать (и возможно записать); false, чтобы запросить монопольную блокировку, когда этот канал должен быть открытым для того, чтобы записать (и возможно читать)IllegalArgumentException
- Если предварительные условия на параметрах не содержатClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как поток вызова блокируется в этом методеFileLockInterruptionException
- Если поток вызова прерывается в то время как блокировано в этом методеOverlappingFileLockException
- Если блокировка, которая перекрывает требуемую область, уже сохранена этой виртуальной машиной Java, или если другой поток уже блокируется в этом методе и пытается заблокировать перекрывающуюся областьNonReadableChannelException
- Если shared является true, этот канал не был открыт для того, чтобы читатьNonWritableChannelException
- Если shared является false, но этот канал не был открыт для того, чтобы записатьIOException
- Если некоторая другая ошибка ввода-вывода происходитlock()
, tryLock()
, tryLock(long,long,boolean)
public final FileLock lock() throws IOException
Вызов этого метода формы fc.lock() ведет себя точно таким же образом как вызов
fc.lock
(0L, Long.MAX_VALUE, false)
ClosedChannelException
- Если этот канал закрываетсяAsynchronousCloseException
- Если другой поток закрывает этот канал, в то время как поток вызова блокируется в этом методеFileLockInterruptionException
- Если поток вызова прерывается в то время как блокировано в этом методеOverlappingFileLockException
- Если блокировка, которая перекрывает требуемую область, уже сохранена этой виртуальной машиной Java, или если другой поток уже блокируется в этом методе и пытается заблокировать перекрывающуюся область того же самого файлаNonWritableChannelException
- Если этот канал не был открыт для того, чтобы записатьIOException
- Если некоторая другая ошибка ввода-вывода происходитlock(long,long,boolean)
, tryLock()
, tryLock(long,long,boolean)
public abstract FileLock tryLock(long position, long size, boolean shared) throws IOException
Этот метод не блокирует. Вызов всегда сразу возвращается, или получавший блокировку на требуемой области или бывший не в состоянии сделать так. Если это не в состоянии получить блокировку, потому что перекрывающаяся блокировка сохранена другой программой тогда, это возвращает null. Если это не в состоянии получить блокировку по какой-либо другой причине тогда выдается, соответствующее исключение.
Область, определенная position и параметрами size, не должна содержаться в пределах, или даже наложиться, фактический базовый файл. Области блокировки фиксируются в размере; если заблокированная область первоначально будет содержать конец файла, и файл растет вне области тогда, то новая часть файла не будет покрыта блокировкой. Если файл, как ожидают, вырастет в размере, и блокировка на всем файле требуется тогда должна быть заблокирована, область, запускающаяся в нуле, и не меньший чем ожидаемый максимальный размер файла. Нулевой параметр tryLock()
метод просто блокирует область размера Long.MAX_VALUE
.
Некоторые операционные системы не поддерживают коллективные блокировки, когда запрос на коллективную блокировку автоматически преобразовывается в запрос на монопольную блокировку. Совместно используется ли недавно полученная блокировка или монопольная, может быть протестирован, вызывая получающийся объект блокировки isShared
метод.
Блокировки файла сохранены от имени всей виртуальной машины Java. Они не являются подходящими для того, чтобы управлять доступом к файлу многократными потоками в пределах той же самой виртуальной машины.
position
- Позиция, в которой должна запуститься заблокированная область; должно быть неотрицательнымsize
- Размер заблокированной области; должно быть неотрицательным, и сумма position + , size должен быть неотрицательнымshared
- true, чтобы запросить коллективную блокировку, false запросить монопольную блокировкуIllegalArgumentException
- Если предварительные условия на параметрах не содержатClosedChannelException
- Если этот канал закрываетсяOverlappingFileLockException
- Если блокировка, которая перекрывает требуемую область, уже сохранена этой виртуальной машиной Java, или если другой поток уже блокируется в этом методе и пытается заблокировать перекрывающуюся область того же самого файлаIOException
- Если некоторая другая ошибка ввода-вывода происходитlock()
, lock(long,long,boolean)
, tryLock()
public final FileLock tryLock() throws IOException
Вызов этого метода формы fc.tryLock() ведет себя точно таким же образом как вызов
fc.tryLock
(0L, Long.MAX_VALUE, false)
ClosedChannelException
- Если этот канал закрываетсяOverlappingFileLockException
- Если блокировка, которая перекрывает требуемую область, уже сохранена этой виртуальной машиной Java, или если другой поток уже блокируется в этом методе и пытается заблокировать перекрывающуюся областьIOException
- Если некоторая другая ошибка ввода-вывода происходитlock()
, lock(long,long,boolean)
, tryLock(long,long,boolean)
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.