Package com.google.common.jimfs
Class JimfsFileChannel
- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.FileChannel
-
- com.google.common.jimfs.JimfsFileChannel
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,java.nio.channels.ByteChannel,java.nio.channels.Channel,java.nio.channels.GatheringByteChannel,java.nio.channels.InterruptibleChannel,java.nio.channels.ReadableByteChannel,java.nio.channels.ScatteringByteChannel,java.nio.channels.SeekableByteChannel,java.nio.channels.WritableByteChannel
final class JimfsFileChannel extends java.nio.channels.FileChannelAFileChannelimplementation that reads and writes to aRegularFileobject. The read and write methods and other methods that read or change the position of the channel are locked because theReadableByteChannelandWritableByteChannelinterfaces specify that the read and write methods block when another thread is currently doing a read or write operation.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classJimfsFileChannel.FakeFileLockA file lock that does nothing, since only one JVM process has access to this file system.
-
Field Summary
Fields Modifier and Type Field Description private booleanappendprivate java.util.Set<java.lang.Thread>blockingThreadsSet of threads that are currently doing an interruptible blocking operation; that is, doing something that requires acquiring the file's lock.private RegularFilefileprivate FileSystemStatefileSystemStateprivate longpositionprivate booleanreadprivate booleanwrite
-
Constructor Summary
Constructors Constructor Description JimfsFileChannel(RegularFile file, java.util.Set<java.nio.file.OpenOption> options, FileSystemState fileSystemState)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.nio.channels.AsynchronousFileChannelasAsynchronousFileChannel(java.util.concurrent.ExecutorService executor)Returns anAsynchronousFileChannelview of this channel using the given executor for asynchronous operations.private booleanbeginBlocking()Begins a blocking operation, making the operation interruptible.private voidcheckLockArguments(long position, long size, boolean shared)(package private) voidcheckOpen()(package private) voidcheckReadable()(package private) voidcheckWritable()private voidendBlocking(boolean completed)Ends a blocking operation, throwing an exception if the thread was interrupted while blocking or if the channel was closed from another thread.voidforce(boolean metaData)protected voidimplCloseChannel()java.nio.channels.FileLocklock(long position, long size, boolean shared)java.nio.MappedByteBuffermap(java.nio.channels.FileChannel.MapMode mode, long position, long size)longposition()java.nio.channels.FileChannelposition(long newPosition)intread(java.nio.ByteBuffer dst)longread(java.nio.ByteBuffer[] dsts, int offset, int length)intread(java.nio.ByteBuffer dst, long position)longsize()longtransferFrom(java.nio.channels.ReadableByteChannel src, long position, long count)longtransferTo(long position, long count, java.nio.channels.WritableByteChannel target)java.nio.channels.FileChanneltruncate(long size)java.nio.channels.FileLocktryLock(long position, long size, boolean shared)intwrite(java.nio.ByteBuffer src)longwrite(java.nio.ByteBuffer[] srcs, int offset, int length)intwrite(java.nio.ByteBuffer src, long position)-
Methods inherited from class java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, isOpen
-
-
-
-
Field Detail
-
blockingThreads
private final java.util.Set<java.lang.Thread> blockingThreads
Set of threads that are currently doing an interruptible blocking operation; that is, doing something that requires acquiring the file's lock. These threads must be interrupted if the channel is closed by another thread.
-
file
private final RegularFile file
-
fileSystemState
private final FileSystemState fileSystemState
-
read
private final boolean read
-
write
private final boolean write
-
append
private final boolean append
-
position
private long position
-
-
Constructor Detail
-
JimfsFileChannel
public JimfsFileChannel(RegularFile file, java.util.Set<java.nio.file.OpenOption> options, FileSystemState fileSystemState)
-
-
Method Detail
-
asAsynchronousFileChannel
public java.nio.channels.AsynchronousFileChannel asAsynchronousFileChannel(java.util.concurrent.ExecutorService executor)
Returns anAsynchronousFileChannelview of this channel using the given executor for asynchronous operations.
-
checkReadable
void checkReadable()
-
checkWritable
void checkWritable()
-
checkOpen
void checkOpen() throws java.nio.channels.ClosedChannelException- Throws:
java.nio.channels.ClosedChannelException
-
beginBlocking
private boolean beginBlocking()
Begins a blocking operation, making the operation interruptible. Returnstrueif the channel was open and the thread was added as a blocking thread; returnsfalseif the channel was closed.
-
endBlocking
private void endBlocking(boolean completed) throws java.nio.channels.AsynchronousCloseExceptionEnds a blocking operation, throwing an exception if the thread was interrupted while blocking or if the channel was closed from another thread.- Throws:
java.nio.channels.AsynchronousCloseException
-
read
public int read(java.nio.ByteBuffer dst) throws java.io.IOException- Specified by:
readin interfacejava.nio.channels.ReadableByteChannel- Specified by:
readin interfacejava.nio.channels.SeekableByteChannel- Specified by:
readin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
read
public long read(java.nio.ByteBuffer[] dsts, int offset, int length) throws java.io.IOException- Specified by:
readin interfacejava.nio.channels.ScatteringByteChannel- Specified by:
readin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
read
public int read(java.nio.ByteBuffer dst, long position) throws java.io.IOException- Specified by:
readin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
write
public int write(java.nio.ByteBuffer src) throws java.io.IOException- Specified by:
writein interfacejava.nio.channels.SeekableByteChannel- Specified by:
writein interfacejava.nio.channels.WritableByteChannel- Specified by:
writein classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
write
public long write(java.nio.ByteBuffer[] srcs, int offset, int length) throws java.io.IOException- Specified by:
writein interfacejava.nio.channels.GatheringByteChannel- Specified by:
writein classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
write
public int write(java.nio.ByteBuffer src, long position) throws java.io.IOException- Specified by:
writein classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
position
public long position() throws java.io.IOException- Specified by:
positionin interfacejava.nio.channels.SeekableByteChannel- Specified by:
positionin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
position
@CanIgnoreReturnValue public java.nio.channels.FileChannel position(long newPosition) throws java.io.IOException- Specified by:
positionin interfacejava.nio.channels.SeekableByteChannel- Specified by:
positionin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
size
public long size() throws java.io.IOException- Specified by:
sizein interfacejava.nio.channels.SeekableByteChannel- Specified by:
sizein classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
truncate
@CanIgnoreReturnValue public java.nio.channels.FileChannel truncate(long size) throws java.io.IOException- Specified by:
truncatein interfacejava.nio.channels.SeekableByteChannel- Specified by:
truncatein classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
force
public void force(boolean metaData) throws java.io.IOException- Specified by:
forcein classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
transferTo
public long transferTo(long position, long count, java.nio.channels.WritableByteChannel target) throws java.io.IOException- Specified by:
transferToin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
transferFrom
public long transferFrom(java.nio.channels.ReadableByteChannel src, long position, long count) throws java.io.IOException- Specified by:
transferFromin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
map
public java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode mode, long position, long size) throws java.io.IOException- Specified by:
mapin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
lock
public java.nio.channels.FileLock lock(long position, long size, boolean shared) throws java.io.IOException- Specified by:
lockin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
tryLock
public java.nio.channels.FileLock tryLock(long position, long size, boolean shared) throws java.io.IOException- Specified by:
tryLockin classjava.nio.channels.FileChannel- Throws:
java.io.IOException
-
checkLockArguments
private void checkLockArguments(long position, long size, boolean shared) throws java.io.IOException- Throws:
java.io.IOException
-
implCloseChannel
protected void implCloseChannel()
- Specified by:
implCloseChannelin classjava.nio.channels.spi.AbstractInterruptibleChannel
-
-