public abstract class FileChannel extends AbstractInterruptibleChannel implements SeekableByteChannel, GatheringByteChannel, ScatteringByteChannel
一个文件的通道是一个SeekableByteChannel
是连接到一个文件。它已经在它的文件都可以queried
和modified
电流位置。文件本身包含一个可变长度的字节,可以读写和其目前的size
序列可以查询。该文件的大小增加时,字节被写入超出其当前的大小;文件的尺寸减小,当它truncated
。文件可能也有一些相关的元数据如访问权限,内容类型,和最后修改时间;这类没有定义元数据的访问方法。
除了熟悉的读,写和关闭字节通道的操作外,这个类还定义了以下文件的具体操作:
一个文件的一个区域可能mapped
直接进入记忆;大文件,这往往是更有效的比平时read或write方法调用。
对一个文件做更新可能forced out
对底层的存储设备,保证数据不会丢失,在系统崩溃时。
字节可以从一个文件to some other channel
,和vice versa
,在某种程度上可以被很多操作系统进入一个非常快的转移直接或从文件系统缓存优化。
一个文件的一个区域可能locked
反对由其他程序访问。
文件通道是安全的,使用多个并发线程。的close
方法可以在任何时候调用,由Channel
指定界面。只有一个操作涉及到信道的位置或可以改变其文件的大小可能会在任何给定的时间内的进展,试图启动第二个这样的操作,而第一个仍然是在进步将阻止,直到第一个操作完成。其他操作,特别是那些采取明确的立场,可能会同时进行,他们是否在事实上这样做是依赖于底层的实现,因此,未指定。
保证该类的一个实例所提供的文件的视图与在同一程序中的其他实例所提供的同一文件的其他视图一致。由这个类的一个实例提供的视图可能或可能不会,但是,与其他并发运行程序所看到的视图,由于底层的操作系统和网络文件系统协议的延迟所看到的视图是一致的。这是真的,不管这些其他程序的语言是写的,以及它们是否在同一台机器上运行,或在其他机器上运行的语言。任何这样的不一致的确切性质是系统依赖性,因此未指定。
一个文件的通道是通过调用这个类的一个定义的open
方法创建。一个文件的通道也可以从现有的FileInputStream
,FileOutputStream
获得,或RandomAccessFile
对象通过调用该对象的getChannel方法,它返回一个连接到相同的底层文件通道。在文件的渠道是从现有的流或随机访问文件的文件通道的状态是密切相连的,物体的getChannel方法返回的通道。改变通道的位置,无论是显式还是通过读或写字节,都会改变原始对象的文件位置,反之亦然。通过文件通道改变文件的长度将改变从原始对象所看到的长度,反之亦然。用写入字节改变文件的内容将改变由原始对象所看到的内容,反之亦然。
在不同的点上,这个类指定了一个“开放阅读”的实例,“开放的写作”,或“开放的阅读和写作”是必需的。一个通道通过一个FileInputStream
实例的getChannel
方法将开放阅读。一个通道通过一个FileOutputStream
实例的getChannel
方法将开放写作。最后,一个通道通过一个RandomAccessFile
实例的getChannel
方法如果实例与模式"r"创建并将打开阅读和写作如果实例与模式"rw"创建阅读是开放的。
一,写作是打开文件的通道可能在追加模式,例如,如果它是从一个文件输出流,通过调用FileOutputStream(File,boolean)
构造函数和第二参数传递true创造了。在这种模式下,每一个相对写操作的调用首先将位置向文件的结尾,然后写入所需的数据。无论是在一个单一的原子操作的位置和写入的数据的进步是系统依赖,因此,未指定。
FileInputStream.getChannel()
,
FileOutputStream.getChannel()
,
RandomAccessFile.getChannel()
Modifier and Type | Class and Description |
---|---|
static class |
FileChannel.MapMode
一个文件映射模式类型安全枚举。
|
Modifier | Constructor and Description |
---|---|
protected |
FileChannel()
初始化该类的一个新实例。
|
Modifier and Type | Method and Description |
---|---|
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
public static FileChannel open(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException
的options
参数决定如何打开该文件。的READ
和WRITE
选项确定该文件是否应该打开阅读或写作。如果没有选择(或APPEND
选项)是包含在数组然后打开文件阅读。默认情况下,读或写在文件的开头开始。
此外READ
和WRITE
,下列选项中可能存在:
Option | 描述 |
---|---|
APPEND |
If this option is present then the file is opened for writing and each invocation of the channel's write method first advances the position to the end of the file and then writes the requested data. Whether the advancement of the position and the writing of the data are done in a single atomic operation is system-dependent and therefore unspecified. This option may not be used in conjunction with the READ or TRUNCATE_EXISTING options. |
TRUNCATE_EXISTING |
If this option is present then the existing file is truncated to a size of 0 bytes. This option is ignored when the file is opened only for reading. |
CREATE_NEW |
If this option is present then a new file is created, failing if the file already exists. When creating a file the check for the existence of the file and the creation of the file if it does not exist is atomic with respect to other file system operations. This option is ignored when the file is opened only for reading. |
CREATE |
If this option is present then an existing file is opened if it exists, otherwise a new file is created. When creating a file the check for the existence of the file and the creation of the file if it does not exist is atomic with respect to other file system operations. This option is ignored if the CREATE_NEW option is also present or the file is opened only for reading. |
DELETE_ON_CLOSE |
When this option is present then the implementation makes a best effort attempt to delete the file when closed by the the close method. If the close method is not invoked then a best effort attempt is made to delete the file when the Java virtual machine terminates. |
SPARSE |
When creating a new file this option is a hint that the new file will be sparse. This option is ignored when not creating a new file. |
SYNC |
Requires that every update to the file's content or metadata be written synchronously to the underlying storage device. (see Synchronized I/O file integrity). |
DSYNC |
Requires that every update to the file's content be written synchronously to the underlying storage device. (see Synchronized I/O file integrity). |
一个实现也可以支持额外的选项。
的attrs
参数是一个可选的文件file-attributes
阵列设置自动创建文件时。
新的渠道是通过调用创建Path
提供者的newFileChannel
方法创建。
path
-打开或创建的文件的路径
options
选项指定如何打开文件
attrs
-文件的可选列表属性设置自动创建文件时
IllegalArgumentException
如果集包含一个无效的组合选择
UnsupportedOperationException
-如果
path
与提供程序不支持创建文件通道相关的,或不支持的开放式选项指定,或者数组包含一个属性不能设置自动创建文件时
IOException
如果I/O错误发生
SecurityException
如果安全管理器安装,它否认未指定许可的实施要求。在默认的提供程序的情况下,该
SecurityManager.checkRead(String)
方法被调用来检查读访问如果文件打开阅读。的
SecurityManager.checkWrite(String)
方法被调用来检查写访问如果文件打开写作
public static FileChannel open(Path path, OpenOption... options) throws IOException
此方法的调用与调用的方式完全相同的行为
FC。open
(文件、选择、新fileattribute <?> [ 0 ]);
哪里
opts
是一套在
options
数组中指定的选项。
path
-打开或创建的文件的路径
options
选项指定如何打开文件
IllegalArgumentException
如果集包含一个无效的组合选择
UnsupportedOperationException
-如果
path
与提供程序不支持创建文件通道相关的,或不支持的开放式选项指定
IOException
如果I/O错误发生
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
-如果其他I/O错误发生
public abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException
在这个通道的当前文件位置开始读取字节,然后将文件位置与实际读取的字节数进行更新。否则,此方法的行为完全按照ScatteringByteChannel
指定界面。
read
接口
ScatteringByteChannel
dsts
的缓冲区字节被转移
offset
-在第一缓冲区中的字节将缓冲数组的偏移;必须是非负的且不大于
dsts.length
length
-缓冲区的最大数量被访问;必须是非负的且不大于
dsts.length -
offset
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道而读操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程在读操作中,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
public final long read(ByteBuffer[] dsts) throws IOException
在这个通道的当前文件位置开始读取字节,然后将文件位置与实际读取的字节数进行更新。否则,此方法的行为完全按照ScatteringByteChannel
指定界面。
read
接口
ScatteringByteChannel
dsts
的缓冲区字节被转移
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道而读操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程在读操作中,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
public abstract int write(ByteBuffer src) throws IOException
字节写在这个通道的当前文件位置,除非该通道是在附加模式,在这种情况下,位置是第一个先进的文件的结尾。如果必要的话,该文件将被生长,以适应写入的字节数,然后将文件位置与实际写入的字节数进行更新。否则,此方法的行为完全由WritableByteChannel
指定界面。
write
接口
SeekableByteChannel
write
接口
WritableByteChannel
src
-缓冲器字节进行检索
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道,而写操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程,而写操作正在进行,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException
字节写在这个通道的当前文件位置,除非该通道是在附加模式,在这种情况下,位置是第一个先进的文件的结尾。如果必要的话,该文件将被生长,以适应写入的字节数,然后将文件位置与实际写入的字节数进行更新。否则,此方法的行为完全按照GatheringByteChannel
指定界面。
write
接口
GatheringByteChannel
srcs
的缓冲区字节进行检索
offset
-在第一缓冲区字节进行检索缓冲数组的偏移;必须是非负的且不大于
srcs.length
length
-缓冲区的最大数量被访问;必须是非负的且不大于
srcs.length -
offset
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道,而写操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程,而写操作正在进行,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
public final long write(ByteBuffer[] srcs) throws IOException
字节写在这个通道的当前文件位置,除非该通道是在附加模式,在这种情况下,位置是第一个先进的文件的结尾。如果必要的话,该文件将被生长,以适应写入的字节数,然后将文件位置与实际写入的字节数进行更新。否则,此方法的行为完全按照GatheringByteChannel
指定界面。
write
接口
GatheringByteChannel
srcs
的缓冲区字节进行检索
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道,而写操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程,而写操作正在进行,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
public abstract long position() throws IOException
position
接口
SeekableByteChannel
ClosedChannelException
-如果这通道关闭
IOException
-如果其他I/O错误发生
public abstract FileChannel position(long newPosition) throws IOException
设置一个大于该文件当前大小的值的位置是合法的,但不改变文件的大小。稍后在这样一个位置读取字节的尝试将立即返回一个文件指示的结束。稍后尝试在这样一个位置写字节将导致文件的增长,以适应新的字节;任何字节的值之间的前一个文件和新写的字节是未指定的。
position
接口
SeekableByteChannel
newPosition
-新的位置,一个非负整数计数字节数从文件的开始
ClosedChannelException
-如果这通道关闭
IllegalArgumentException
-如果新的位置是负的
IOException
-如果其他I/O错误发生
public abstract long size() throws IOException
size
接口
SeekableByteChannel
ClosedChannelException
-如果这通道关闭
IOException
-如果其他I/O错误发生
public abstract FileChannel truncate(long size) throws IOException
如果给定的大小小于文件的当前大小,则文件被截断,丢弃超出文件新结束的任何字节。如果给定的大小大于或等于该文件的当前大小,则该文件不被修改。在任何一种情况下,如果这个通道的文件位置大于给定的大小,那么它被设置为该大小。
truncate
接口
SeekableByteChannel
size
-新的大小,一个非负的字节数
NonWritableChannelException
-如果这个渠道没有打开写作
ClosedChannelException
-如果这通道关闭
IllegalArgumentException
-如果新的大小负
IOException
-如果其他I/O错误发生
public abstract void force(boolean metaData) throws IOException
如果这个通道的文件驻留在本地存储设备上,那么当这个方法返回时,保证所有对文件的更改,因为这个通道被创建,或者因为这个方法是最后一次调用,将被写入该设备。这是有用的,以确保关键信息不会丢失在系统崩溃的事件。
如果该文件不驻留在本地设备上,则没有这样的保证。
的metaData参数可用于限制数量的I/O操作,这种方法要求执行。这个参数传递false表明只有更新文件的内容需要被写入存储;通过true表示文件的内容和元数据的更新必须是书面的,通常至少需要一个I/O操作。是否这个参数实际上有任何效果取决于底层的操作系统,因此是未指定的。
调用此方法可能会导致一个I / O操作发生,即使该通道只打开阅读。例如,一些操作系统维护一个文件的元数据的最后一个访问时间,而这个时间是在每次读取文件时更新的。是否真的这样做是系统依赖,因此,未指定。
此方法只保证通过在这个类中定义的方法来强制对这个通道的文件进行更改。它可能会或可能不被修改通过调用map
方法得到的mapped byte buffer
含量的变化。调用映射的字节缓冲区的force
方法将力进行缓冲区的内容被写入的变化。
metaData
-如果
true将这一方法需要迫使更改文件的内容和元数据都被写入到存储;否则,它只需要力的含量变化来写
ClosedChannelException
-如果这通道关闭
IOException
-如果其他I/O错误发生
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
-如果其他I/O错误发生
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
-如果其他I/O错误发生
public abstract int read(ByteBuffer dst, long position) throws IOException
这种方法以同样的方式为read(ByteBuffer)
方法,除了字节读取从给定的文件的位置,而不是通道的当前位置。此方法不修改此通道的位置。如果给定位置大于文件的当前大小,则没有读取字节数。
dst
-缓冲区中的字节都被转移
position
转移开始文件位置;必须是非负数
IllegalArgumentException
-如果位置是负的
NonReadableChannelException
-如果这通道不打开阅读
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道而读操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程在读操作中,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
public abstract int write(ByteBuffer src, long position) throws IOException
这种方法以同样的方式为write(ByteBuffer)
方法,除了字节写在给定的文件的位置,而不是通道的当前位置。此方法不修改此通道的位置。如果给定位置大于文件的当前大小,则文件将被增长以适应新的字节;在文件的上一个文件和新的字节之间的任何字节的值是未指定的。
src
-缓冲器字节被转移
position
转移开始文件位置;必须是非负数
IllegalArgumentException
-如果位置是负的
NonWritableChannelException
-如果这个渠道没有打开写作
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道,而写操作正在进行中
ClosedByInterruptException
如果另一个线程中断当前线程,而写操作正在进行,从而关闭通道和设置当前线程的中断状态
IOException
-如果其他I/O错误发生
public abstract MappedByteBuffer map(FileChannel.MapMode mode, long position, long size) throws IOException
一个文件的区域可以在三种模式中的一个被映射到内存中:
只读:任何试图修改导致缓冲区会造成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
-如果其他I/O错误发生
FileChannel.MapMode
,
MappedByteBuffer
public abstract FileLock lock(long position, long size, boolean shared) throws IOException
该方法的调用将阻塞,直到该区域可以被锁定,该通道被关闭,或调用线程被中断,以先到为准。
如果这个通道关闭由另一个线程将本方法的一个AsynchronousCloseException
过程中调用会抛出。
如果调用线程在等待获取锁,那么它的中断状态将被设置和FileLockInterruptionException
会被打断。如果调用的中断状态设置调用此方法时,将引发异常立即;线程的中断状态不会改变。
由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
-如果其他I/O错误发生
lock()
,
tryLock()
,
tryLock(long,long,boolean)
public final FileLock lock() throws IOException
这fc.lock()表现一样,调用的方法调用
FC。lock
(0,long.max_value,假)
ClosedChannelException
-如果这通道关闭
AsynchronousCloseException
如果另一个线程关闭通道,调用线程在该方法中受阻
FileLockInterruptionException
如果调用线程在这个方法被中断
OverlappingFileLockException
如果锁重叠请求的区域已经被此java虚拟机,或者如果另一个线程已经在这个方法封锁,试图锁定同一文件的重叠区域
NonWritableChannelException
-如果这个渠道没有打开写作
IOException
-如果其他I/O错误发生
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
-如果其他I/O错误发生
lock()
,
lock(long,long,boolean)
,
tryLock()
public final FileLock tryLock() throws IOException
这种形式的fc.tryLock()方法调用的行为一样,调用
FC。tryLock
(0,long.max_value,假)
ClosedChannelException
-如果这通道关闭
OverlappingFileLockException
如果锁重叠请求的区域已经被此java虚拟机,或者如果另一个线程已经在这个方法封锁,试图锁定一个重叠区域
IOException
-如果其他I/O错误发生
lock()
,
lock(long,long,boolean)
,
tryLock(long,long,boolean)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.