Class LOBStreamControl
java.lang.Object
org.apache.derby.impl.jdbc.LOBStreamControl
This class acts as a layer of blob/clob repository (in memory or file).
The max bytes of data stored in memory depends on the way this
class is created. If the class is created with initial data, the buffer
size is set to the size of the byte array supplied, but no larger than
MAX_BUF_SIZE. If no initial data is supplied, or if the initial data size
is less than DEFAULT_BUF_SIZE, the buffer size is set to DEFAULT_BUF_SIZE.
When write increases the data beyond this value a temporary file is created
and data is moved into that. If truncate reduces the size of the file below
initial buffer size, the data is moved into memory.
This class also creates InputStream and OutputStream which can be used to access
blob data irrespective of if its in memory or in file.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final intprivate final EmbedConnectionprivate byte[]private static final intprivate booleanprivate static final intprivate LOBFileprivate long -
Constructor Summary
ConstructorsConstructorDescriptionCreates an empty LOBStreamControl.LOBStreamControl(EmbedConnection conn, byte[] data) Creates a LOBStreamControl and initializes with a bytes array. -
Method Summary
Modifier and TypeMethodDescription(package private) voidcopyData(InputStream inStream, long length) Copies bytes from stream to local storage.(package private) longcopyUtf8Data(InputStream utf8Stream, long charLength) Copies UTF-8 encoded chars from a stream to local storage.private voiddeleteFile(StorageFile file) protected voidfinalize()private static ObjectfindService(String factoryInterface, String serviceName) Privileged service lookup.private static ObjectfindServiceModule(Object serviceModule, String factoryInterface) Privileged startup.(package private) voidfree()Invalidates all the variables and closes file handle if open.(package private) InputStreamgetInputStream(long pos) returns input stream linked with this object.(package private) longReturns length of data.(package private) OutputStreamgetOutputStream(long pos) returns output stream linked with this object(package private) longReturns the running sequence number to check if the lob is updated since last access.private voidinit(byte[] b, long len) private voidisValidOffset(int off, int length) private voidisValidPostion(long pos) (package private) intread(byte[] buff, int off, int len, long pos) Reads bytes starting from 'position' into bytes array. starting from 'offset'(package private) intread(long pos) Reads one byte.private intreadBytes(byte[] b, int off, int len, long pos) private voidreleaseTempFile(LOBFile file) Close and release all resources held by a temporary file.(package private) longreplaceBytes(byte[] buf, long stPos, long endPos) Replaces a block of bytes in the middle of the LOB with a another block of bytes, which may be of a different size.(package private) voidtruncate(long size) Resets the size.private longupdateData(byte[] bytes, int offset, int len, long pos) (package private) longwrite(byte[] b, int off, int len, long pos) Writeslenbytes from the specified byte array to the LOB.(package private) longwrite(int b, long pos) Writes one byte.
-
Field Details
-
tmpFile
-
dataBytes
private byte[] dataBytes -
isBytes
private boolean isBytes -
bufferSize
private final int bufferSize -
conn
-
updateCount
private long updateCount -
DEFAULT_BUF_SIZE
private static final int DEFAULT_BUF_SIZE- See Also:
-
MAX_BUF_SIZE
private static final int MAX_BUF_SIZE- See Also:
-
-
Constructor Details
-
LOBStreamControl
LOBStreamControl(EmbedConnection conn) Creates an empty LOBStreamControl.- Parameters:
conn- Connection for this lob
-
LOBStreamControl
LOBStreamControl(EmbedConnection conn, byte[] data) throws IOException, StandardException Creates a LOBStreamControl and initializes with a bytes array.- Parameters:
conn- Connection for this lobdata- initial value- Throws:
IOExceptionStandardException
-
-
Method Details
-
init
- Throws:
IOExceptionStandardException
-
updateData
- Throws:
StandardException
-
isValidPostion
- Throws:
IOExceptionStandardException
-
isValidOffset
- Throws:
StandardException
-
write
Writes one byte.- Parameters:
b- bytepos-- Returns:
- new position
- Throws:
IOException- if writing to the LOB file failsStandardException- if encrypting/decrypting the LOB file fails
-
write
Writeslenbytes from the specified byte array to the LOB.- Parameters:
b- byte arrayoff- offset from where to read from the byte arraylen- number of bytes to be writtenpos- starting position- Returns:
- The position after the bytes have been written to the LOB.
- Throws:
IOException- if writing to the LOB failsStandardException- if writing to the LOB failsIndexOutOfBoundsException- iflenis larger thanb.length - off
-
read
Reads one byte.- Parameters:
pos- position from where to read- Returns:
- byte
- Throws:
IOException- if reading the LOB file failsStandardException- if decrypting an encrypted LOB file fails
-
readBytes
private int readBytes(byte[] b, int off, int len, long pos) -
read
Reads bytes starting from 'position' into bytes array. starting from 'offset'- Parameters:
buff- array into the bytes will be copiedoff- offset from where the array has to be populatedlen- number of bytes to readpos- initial position before reading- Returns:
- number new position
- Throws:
IOException- if reading the LOB file failsStandardException- if decrypting an encrypted LOB file fails
-
getInputStream
returns input stream linked with this object.- Parameters:
pos- initial postion- Returns:
- InputStream
-
getOutputStream
returns output stream linked with this object- Parameters:
pos- initial postion- Returns:
- OutputStream
-
getLength
-
truncate
Resets the size.- Parameters:
size- new size should be smaller than existing size- Throws:
IOExceptionStandardException
-
copyData
Copies bytes from stream to local storage.Note that specifying the length as
Long.MAX_VALUEresults in reading data from the stream until EOF is reached, but no length checking will be performed.- Parameters:
inStream- the stream to copy fromlength- number of bytes to be copied, orLong.MAX_VALUEto copy everything until EOF is reached- Throws:
IOException- if reading or writing a LOB file failsStandardException- if encrypting or decrypting a LOB file fails
-
copyUtf8Data
Copies UTF-8 encoded chars from a stream to local storage.Note that specifying the length as
Long.MAX_VALUEresults in reading data from the stream until EOF is reached, but no length checking will be performed.- Parameters:
utf8Stream- the stream to copy fromcharLength- number of chars to be copied, orLong.MAX_VALUEto copy everything until EOF is reached- Returns:
- The number of characters copied.
- Throws:
EOFException- if EOF is reached prematurelyIOException- thrown on a number of error conditionsStandardException- if reading, writing or truncating theLOBStreamControl-object failsUTFDataFormatException- if an invalid UTF-8 encoding is detected
-
finalize
-
deleteFile
-
free
Invalidates all the variables and closes file handle if open.- Throws:
IOException- if closing the file fails
-
releaseTempFile
Close and release all resources held by a temporary file. The file will also be deleted from the file system and removed from the list ofLOBFiles inEmbedConnection.- Parameters:
file- the temporary file- Throws:
IOException- if the file cannot be closed or deleted
-
replaceBytes
Replaces a block of bytes in the middle of the LOB with a another block of bytes, which may be of a different size.The new byte array may not be be of same length as the original, thus it may result in resizing the total lob.
- Parameters:
buf- byte array which will be written inplace of old blockstPos- inclusive starting position of current blockendPos- exclusive end position of current block- Returns:
- Current position after write.
- Throws:
IOException- if writing to the temporary file failsStandardException
-
getUpdateCount
long getUpdateCount()Returns the running sequence number to check if the lob is updated since last access.- Returns:
- The current update sequence number.
-
findServiceModule
private static Object findServiceModule(Object serviceModule, String factoryInterface) throws StandardException Privileged startup. Must be private so that user code can't call this entry point.- Throws:
StandardException
-
findService
-