我正在工作I/O
并java.io.FileInputStream.getChannel()
在互联网上找到。我想知道getChannel
. 为什么我们需要使用java.io.FileInputStream.getChannel()
?
示例:http ://www.tutorialspoint.com/java/io/fileinputstream_getchannel.htm
我正在工作I/O
并java.io.FileInputStream.getChannel()
在互联网上找到。我想知道getChannel
. 为什么我们需要使用java.io.FileInputStream.getChannel()
?
示例:http ://www.tutorialspoint.com/java/io/fileinputstream_getchannel.htm
通过创建通道,多个并发线程可以安全地访问流。
从FileChannel类:
多个并发线程可以安全地使用文件通道。按照 Channel 接口的规定,可以随时调用 close 方法。在任何给定时间,只有一项涉及通道位置或可以更改其文件大小的操作正在进行;在第一个操作仍在进行时尝试启动第二个此类操作将阻塞,直到第一个操作完成。其他操作,特别是那些采取明确立场的操作,可以同时进行;他们是否真的这样做取决于底层实现,因此未指定。
getChannel
只需将 a 返回FileChannel
到原始File
.
FileChannel提供了一种读取、写入、映射和操作文件的方法。这是一个相当低级的实用程序类,如果您是 Java 新手,我不建议您使用该类,但可以查看FileWriter或FileReader。
当您想要在文件的特定区域获得锁 时,甚至当您想要锁定整个文件时, getChannel() 方法也很重要。
public void blockFiles() throws FileNotFoundException {
FileInputStream fis = new FileInputStream(new File("some.txt"));
FileChannel fileChannel = fis.getChannel();
try {
FileLock fileLock = fileChannel.tryLock();
if (fileLock !=null){
System.out.println("File is locked, You won't get access anymore");
}
} catch (IOException e) {
e.printStackTrace();
}
}
当您有多个进程在同一个文件上工作并且您想要防止并发问题时,它很有用。