Package org.apache.commons.io.input
Class MemoryMappedFileInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.apache.commons.io.input.MemoryMappedFileInputStream
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
public final class MemoryMappedFileInputStream extends java.io.InputStream
AnInputStream
that utilizes memory mapped files to improve performance. A sliding window of the file is mapped to memory to avoid mapping the entire file to memory at one time. The size of the sliding buffer is configurable.For most operating systems, mapping a file into memory is more expensive than reading or writing a few tens of kilobytes of data. From the standpoint of performance. it is generally only worth mapping relatively large files into memory.
Note: Use of this class does not necessarily obviate the need to use a
BufferedInputStream
. Depending on the use case, the use of buffering may still further improve performance. For example:To build an instance, see
MemoryMappedFileInputStream.Builder
.BufferedInputStream s = new BufferedInputStream(new GzipInputStream( MemoryMappedFileInputStream.builder() .setPath(path) .setBufferSize(256 * 1024) .get()));
should outperform:
new GzipInputStream(new MemoryMappedFileInputStream(path))
GzipInputStream s = new GzipInputStream( MemoryMappedFileInputStream.builder() .setPath(path) .setBufferSize(256 * 1024) .get());
- Since:
- 2.12.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MemoryMappedFileInputStream.Builder
Builds a newMemoryMappedFileInputStream
instance.
-
Field Summary
Fields Modifier and Type Field Description private java.nio.ByteBuffer
buffer
private int
bufferSize
private java.nio.channels.FileChannel
channel
private boolean
closed
private static int
DEFAULT_BUFFER_SIZE
Default size of the sliding memory mapped buffer.private static java.nio.ByteBuffer
EMPTY_BUFFER
private long
nextBufferPosition
The starting position (within the file) of the next sliding buffer.
-
Constructor Summary
Constructors Modifier Constructor Description private
MemoryMappedFileInputStream(java.nio.file.Path file, int bufferSize)
Constructs a new instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
available()
static MemoryMappedFileInputStream.Builder
builder()
Constructs a newMemoryMappedFileInputStream.Builder
.private void
cleanBuffer()
void
close()
private void
ensureOpen()
(package private) int
getBufferSize()
private void
nextBuffer()
int
read()
int
read(byte[] b, int off, int len)
long
skip(long n)
-
-
-
Field Detail
-
DEFAULT_BUFFER_SIZE
private static final int DEFAULT_BUFFER_SIZE
Default size of the sliding memory mapped buffer. We use 256K, equal to 65536 pages (given a 4K page size). Increasing the value beyond the default size will generally not provide any increase in throughput.- See Also:
- Constant Field Values
-
EMPTY_BUFFER
private static final java.nio.ByteBuffer EMPTY_BUFFER
-
bufferSize
private final int bufferSize
-
channel
private final java.nio.channels.FileChannel channel
-
buffer
private java.nio.ByteBuffer buffer
-
closed
private boolean closed
-
nextBufferPosition
private long nextBufferPosition
The starting position (within the file) of the next sliding buffer.
-
-
Constructor Detail
-
MemoryMappedFileInputStream
private MemoryMappedFileInputStream(java.nio.file.Path file, int bufferSize) throws java.io.IOException
Constructs a new instance.- Parameters:
file
- The path of the file to open.bufferSize
- Size of the sliding buffer.- Throws:
java.io.IOException
- If an I/O error occurs.
-
-
Method Detail
-
builder
public static MemoryMappedFileInputStream.Builder builder()
Constructs a newMemoryMappedFileInputStream.Builder
.- Returns:
- a new
MemoryMappedFileInputStream.Builder
. - Since:
- 2.12.0
-
available
public int available() throws java.io.IOException
- Overrides:
available
in classjava.io.InputStream
- Throws:
java.io.IOException
-
cleanBuffer
private void cleanBuffer()
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.io.InputStream
- Throws:
java.io.IOException
-
ensureOpen
private void ensureOpen() throws java.io.IOException
- Throws:
java.io.IOException
-
getBufferSize
int getBufferSize()
-
nextBuffer
private void nextBuffer() throws java.io.IOException
- Throws:
java.io.IOException
-
read
public int read() throws java.io.IOException
- Specified by:
read
in classjava.io.InputStream
- Throws:
java.io.IOException
-
read
public int read(byte[] b, int off, int len) throws java.io.IOException
- Overrides:
read
in classjava.io.InputStream
- Throws:
java.io.IOException
-
skip
public long skip(long n) throws java.io.IOException
- Overrides:
skip
in classjava.io.InputStream
- Throws:
java.io.IOException
-
-