|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectuk.ac.starlink.table.storage.AdaptiveByteStore
public class AdaptiveByteStore
ByteStore which adopts a hybrid approach between use of memory and use of disk. Bytes are written into an array in memory up to a given size limit; if the amount written exceeds this limit, it's all put in a temporary file instead.
This class is intended to be a general purpose StoragePolicy implementation that does something sensible most of the time. The details of the implementation may be changed following experience.
The current implementation uses ByteBuffer.allocateDirect(int)
for byte arrays in memory apart from rather small ones.
On most OSes this corresponds to using malloc()
,
thus avoiding heavy use of JVM heap memory.
Note very large arrays are still stored on disk, not directly
allocated.
Constructor Summary | |
---|---|
AdaptiveByteStore()
Constructs a new store with a default memory limit. |
|
AdaptiveByteStore(int memLimit)
Constructs a new store with a given maximum memory limit. |
Method Summary | |
---|---|
void |
close()
Tidies up. |
void |
copy(java.io.OutputStream out)
Takes all the data written so far into this store's sink stream and copies it to a destination stream. |
long |
getLength()
Returns the number of bytes currently stored in this object. |
java.io.OutputStream |
getOutputStream()
Returns an output stream which can be used to write to the store. |
java.nio.ByteBuffer[] |
toByteBuffers()
Returns an array of byte buffers containing the bytes written to this store. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public AdaptiveByteStore(int memLimit) throws java.io.IOException
memLimit
- maximum size of in-memory buffer
java.io.IOException
public AdaptiveByteStore() throws java.io.IOException
java.io.IOException
Method Detail |
---|
public java.io.OutputStream getOutputStream()
ByteStore
BufferedOutputStream
for efficiency if required.
getOutputStream
in interface ByteStore
public long getLength()
ByteStore
getLength
in interface ByteStore
public void copy(java.io.OutputStream out) throws java.io.IOException
ByteStore
copy
in interface ByteStore
out
- data destination stream
java.io.IOException
public java.nio.ByteBuffer[] toByteBuffers() throws java.io.IOException
ByteStore
Integer.MAX_VALUE
, more than one will be
required. The limit of each buffer indicates the
number of bytes it contains.
Usual usage will be to write all data, then call this method once; this model may affect implementation decisions about efficiency.
toByteBuffers
in interface ByteStore
java.io.IOException
- if there is an I/O errorpublic void close()
ByteStore
close
in interface ByteStore
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |