我正在I/O
工作并在互联网上找到java.io.FileInputStream.getChannel()
。我想知道getChannel
的确切目的。为什么我们需要使用java.io.FileInputStream.getChannel()
?
示例:http://www.tutorialspoint.com/java/io/fileinputstream_getchannel.htm
答案 0 :(得分:3)
通过创建channel,流可以安全地由多个并发线程访问。
来自FileChannel class:
多个并发线程可以安全地使用文件通道。可以在Channel接口指定的任何时间调用close方法。在任何给定时间,只有一个涉及频道位置或可以改变其文件大小的操作可能正在进行中;在第一个操作仍在进行时尝试启动第二个此类操作将阻塞,直到第一个操作完成。其他操作,特别是那些采取明确立场的操作,可以同时进行;他们实际上是否这样做取决于基本的实施,因此没有具体说明。
答案 1 :(得分:2)
getChannel
只会将FileChannel
返回原始File
。
FileChannel提供了一种读取,写入,映射和操作文件的方法。它是一个相当低级的实用程序类,如果您不熟悉Java,我建议您不要使用此类,但请查看FileWriter或FileReader。
答案 2 :(得分:0)
当你想要获得锁时, 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();
}
}
当您有多个进程在同一个文件上工作并希望防止并发问题时,它非常有用。