欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

FileChannel

最编程 2024-07-28 19:24:54
...
用于读取,写入,映射和操作文件的通道。

文件通道是连接到文件的SeekableByteChannel 它的文件中有一个当前位置 ,可以是queriedmodified 该文件本身包含一个可变长度的字节序列,可以读取和写入,并且可以查询其当前的size 当字节写入超出其当前大小时,文件的大小会增加; 当文件大小为truncated时,文件的大小会减小。 该文件还可以具有一些关联的元数据,例如访问权限,内容类型和最后修改时间; 此类未定义元数据访问的方法。

除了熟悉的字节通道的读,写和关闭操作外,该类还定义了以下特定于文件的操作:

  • 字节中的字节可以是readwritten ,其方式不会影响通道的当前位置。

  • 文件的一个区域可以直接进入内存mapped ; 对于大文件,这通常比调用通常的readwrite方法更有效。

  • 对文件所做的更新可能是forced out到底层存储设备,确保在系统崩溃时数据不会丢失。

  • 字节可以从文件to some other channelvice versa传输 ,其方式可以由许多操作系统优化为直接进出文件系统高速缓存的非常快速的传输。

  • 文件的某个区域可能是locked,以防其他程序访问。

文件通道可供多个并发线程使用。 可以随时调用close方法,如Channel接口所指定。 在任何给定时间,只有一个涉及通道位置或可以更改其文件大小的操作可能正在进行中; 在第一个操作仍在进行时尝试启动第二个此类操作将阻塞,直到第一个操作完成。 其他操作,特别是那些采取明确立场的操作,可以同时进行; 他们实际上是否这样做取决于基本的实施,因此没有具体说明。

由此类实例提供的文件视图保证与同一程序中其他实例提供的同一文件的其他视图一致。 然而,由于底层操作系统执行的高速缓存和网络文件系统协议引起的延迟,该类实例提供的视图可能会也可能不会与其他同时运行的程序所看到的视图一致。 无论编写这些其他程序的语言是什么,以及它们是在同一台机器上运行还是在其他机器上运行,都是如此。 任何此类不一致的确切性质都取决于系统,因此未指定。

通过调用此类定义的open方法之一来创建文件通道。 的文件信道也可以从现有的获得FileInputStreamFileOutputStream ,或RandomAccessFile对象通过调用该对象的getChannel方法,它返回被连接到相同的基本文件的文件信道。 在从现有流或随机访问文件获得文件通道的情况下,文件通道的状态与其getChannel方法返回通道的对象的状态紧密相关。 无论是显式地还是通过读取或写入字节来改变通道的位置,都将改变原始对象的文件位置,反之亦然。 通过文件通道更改文件的长度将改变通过原始对象看到的长度,反之亦然。 通过写入字节来更改文件的内容将更改原始对象看到的内容,反之亦然。

在不同的点上,该类指定需要“打开以供阅读”,“打开以进行写入”或“打开以进行读写”的实例。 通过FileInputStream实例的getChannel方法获得的通道将打开以供阅读。 通过FileOutputStream实例的getChannel方法获得的通道将打开以进行写入。 最后,通过所获得的信道getChannel一个的方法RandomAccessFile实例将是开放的,如果该实例用模式下创建阅读"r"和将开放阅读和如果该实例用模式下创建的写"rw"

打开以进行写入的文件通道可能处于追加模式 ,例如,如果它是从通过调用FileOutputStream(File,boolean)构造函数创建的文件输出流中获取并为第二个参数传递true 在此模式下,相对写入操作的每次调用首先将位置前进到文件的末尾,然后写入所请求的数据。 位置的提升和数据的写入是在单个原子操作中完成的是系统相关的,因此是未指定的。