Class NIOFSDirectory
- java.lang.Object
-
- org.apache.lucene.store.Directory
-
- org.apache.lucene.store.BaseDirectory
-
- org.apache.lucene.store.FSDirectory
-
- org.apache.lucene.store.NIOFSDirectory
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
public class NIOFSDirectory extends FSDirectory
AnFSDirectory
implementation that uses java.nio's FileChannel's positional read, which allows multiple threads to read from the same file without synchronizing.This class only uses FileChannel when reading; writing is achieved with
FSDirectory.FSIndexOutput
.NOTE: NIOFSDirectory is not recommended on Windows because of a bug in how FileChannel.read is implemented in Sun's JRE. Inside of the implementation the position is apparently synchronized. See here for details.
NOTE: Accessing this class either directly or indirectly from a thread while it's interrupted can close the underlying file descriptor immediately if at the same time the thread is blocked on IO. The file descriptor will remain closed and subsequent access to
NIOFSDirectory
will throw aClosedChannelException
. If your application uses eitherThread.interrupt()
orFuture.cancel(boolean)
you should useSimpleFSDirectory
in favor ofNIOFSDirectory
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
NIOFSDirectory.NIOFSIndexInput
Reads bytes withFileChannel.read(ByteBuffer, long)
-
Nested classes/interfaces inherited from class org.apache.lucene.store.FSDirectory
FSDirectory.FSIndexInput, FSDirectory.FSIndexOutput
-
Nested classes/interfaces inherited from class org.apache.lucene.store.Directory
Directory.IndexInputSlicer
-
-
Field Summary
-
Fields inherited from class org.apache.lucene.store.FSDirectory
DEFAULT_READ_CHUNK_SIZE, directory, staleFiles
-
Fields inherited from class org.apache.lucene.store.BaseDirectory
isOpen, lockFactory
-
-
Constructor Summary
Constructors Constructor Description NIOFSDirectory(File path)
Create a new NIOFSDirectory for the named location andNativeFSLockFactory
.NIOFSDirectory(File path, LockFactory lockFactory)
Create a new NIOFSDirectory for the named location.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Directory.IndexInputSlicer
createSlicer(String name, IOContext context)
Creates anDirectory.IndexInputSlicer
for the given file name.IndexInput
openInput(String name, IOContext context)
Creates an IndexInput for the file with the given name.-
Methods inherited from class org.apache.lucene.store.FSDirectory
close, createOutput, deleteFile, ensureCanWrite, fileExists, fileLength, fsync, getDirectory, getLockID, getReadChunkSize, listAll, listAll, onIndexOutputClosed, open, open, setLockFactory, setReadChunkSize, sync, toString
-
Methods inherited from class org.apache.lucene.store.BaseDirectory
clearLock, ensureOpen, getLockFactory, makeLock
-
-
-
-
Constructor Detail
-
NIOFSDirectory
public NIOFSDirectory(File path, LockFactory lockFactory) throws IOException
Create a new NIOFSDirectory for the named location.- Parameters:
path
- the path of the directorylockFactory
- the lock factory to use, or null for the default (NativeFSLockFactory
);- Throws:
IOException
- if there is a low-level I/O error
-
NIOFSDirectory
public NIOFSDirectory(File path) throws IOException
Create a new NIOFSDirectory for the named location andNativeFSLockFactory
.- Parameters:
path
- the path of the directory- Throws:
IOException
- if there is a low-level I/O error
-
-
Method Detail
-
openInput
public IndexInput openInput(String name, IOContext context) throws IOException
Creates an IndexInput for the file with the given name.- Specified by:
openInput
in classDirectory
- Throws:
IOException
-
createSlicer
public Directory.IndexInputSlicer createSlicer(String name, IOContext context) throws IOException
Description copied from class:Directory
Creates anDirectory.IndexInputSlicer
for the given file name. IndexInputSlicer allows otherDirectory
implementations to efficiently open one or more slicedIndexInput
instances from a single file handle. The underlying file handle is kept open until theDirectory.IndexInputSlicer
is closed.- Must throw
FileNotFoundException
if the file does not exist (notjava.nio.file.NoSuchFileException
of Java 7).- Overrides:
createSlicer
in classDirectory
- Throws:
IOException
- if anIOException
occurs
- Must throw
-
-