2

我正在工作I/Ojava.io.FileInputStream.getChannel()在互联网上找到。我想知道getChannel. 为什么我们需要使用java.io.FileInputStream.getChannel()

示例:http ://www.tutorialspoint.com/java/io/fileinputstream_getchannel.htm

4

3 回答 3

3

通过创建通道,多个并发线程可以安全地访问流。

FileChannel类:

多个并发线程可以安全地使用文件通道。按照 Channel 接口的规定,可以随时调用 close 方法。在任何给定时间,只有一项涉及通道位置或可以更改其文件大小的操作正在进行;在第一个操作仍在进行时尝试启动第二个此类操作将阻塞,直到第一个操作完成。其他操作,特别是那些采取明确立场的操作,可以同时进行;他们是否真的这样做取决于底层实现,因此未指定。

于 2013-09-19T12:18:35.240 回答
2

getChannel只需将 a 返回FileChannel到原始File.

FileChannel提供了一种读取、写入、映射和操作文件的方法。这是一个相当低级的实用程序类,如果您是 Java 新手,我不建议您使用该类,但可以查看FileWriterFileReader

于 2013-09-19T12:15:04.610 回答
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();
    }
}

当您有多个进程在同一个文件上工作并且您想要防止并发问题时,它很有用。

于 2018-03-20T00:12:28.217 回答