Package org.apache.derby.impl.jdbc
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 int
private final EmbedConnection
private byte[]
private static final int
private boolean
private static final int
private LOBFile
private 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) void
copyData
(InputStream inStream, long length) Copies bytes from stream to local storage.(package private) long
copyUtf8Data
(InputStream utf8Stream, long charLength) Copies UTF-8 encoded chars from a stream to local storage.private void
deleteFile
(StorageFile file) protected void
finalize()
private static Object
findService
(String factoryInterface, String serviceName) Privileged service lookup.private static Object
findServiceModule
(Object serviceModule, String factoryInterface) Privileged startup.(package private) void
free()
Invalidates all the variables and closes file handle if open.(package private) InputStream
getInputStream
(long pos) returns input stream linked with this object.(package private) long
Returns length of data.(package private) OutputStream
getOutputStream
(long pos) returns output stream linked with this object(package private) long
Returns the running sequence number to check if the lob is updated since last access.private void
init
(byte[] b, long len) private void
isValidOffset
(int off, int length) private void
isValidPostion
(long pos) (package private) int
read
(byte[] buff, int off, int len, long pos) Reads bytes starting from 'position' into bytes array.(package private) int
read
(long pos) Reads one byte.private int
readBytes
(byte[] b, int off, int len, long pos) private void
releaseTempFile
(LOBFile file) Close and release all resources held by a temporary file.(package private) long
replaceBytes
(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) void
truncate
(long size) Resets the size.private long
updateData
(byte[] bytes, int offset, int len, long pos) (package private) long
write
(byte[] b, int off, int len, long pos) Writeslen
bytes from the specified byte array to the LOB.(package private) long
write
(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:
IOException
StandardException
-
-
Method Details
-
init
- Throws:
IOException
StandardException
-
updateData
- Throws:
StandardException
-
isValidPostion
- Throws:
IOException
StandardException
-
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
Writeslen
bytes 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
- iflen
is 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
Returns length of data.- Returns:
- length
- Throws:
IOException
-
truncate
Resets the size.- Parameters:
size
- new size should be smaller than existing size- Throws:
IOException
StandardException
-
copyData
Copies bytes from stream to local storage.Note that specifying the length as
Long.MAX_VALUE
results 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_VALUE
to 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_VALUE
results 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_VALUE
to 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 ofLOBFile
s 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
Privileged service lookup. Must be private so that user code can't call this entry point.
-