Class EncryptedLOBFile

java.lang.Object
org.apache.derby.impl.jdbc.LOBFile
org.apache.derby.impl.jdbc.EncryptedLOBFile

class EncryptedLOBFile extends LOBFile
This class is a wrapper class on top of StorageRandomAccess to provide common methods to write in encrypted file. This class is NOT thread safe. The user class should take care of synchronization if being used in multi threaded environment.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final int
    Block size for encryption.
    private long
    Current file position.
    private final DataFactory
    Factory object used for encryption and decryption.
    private final byte[]
    Leftover bytes.
    private int
    Number of actual bytes in tail array.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructs the EncryptedLOBFile object with encryption support.
  • Method Summary

    Modifier and Type
    Method
    Description
    private byte[]
    getBlocks(long pos, int len)
    Find the blocks containing the data we are interested in.
    (package private) long
    Returns the currrent position in the file.
    (package private) long
    Returns file length.
    (package private) int
    read(byte[] buff, int off, int len)
    Reads len or remaining bytes in the file (whichever is lower) bytes into buff starting from off position of the buffer.
    (package private) int
    Reads one byte from file.
    (package private) void
    seek(long pos)
    Sets the current file pointer to specific location.
    (package private) void
    setLength(long size)
    Sets the file length to a given size.
    (package private) void
    write(byte[] b)
    Write the buffer into file at current position.
    (package private) void
    write(byte[] b, int off, int len)
    Writes length number of bytes from buffer starting from off position.
    (package private) void
    write(int b)
    Writes one byte into the file.

    Methods inherited from class org.apache.derby.impl.jdbc.LOBFile

    close, getStorageFile

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • blockSize

      private final int blockSize
      Block size for encryption.
    • tail

      private final byte[] tail
      Leftover bytes. Stored in memory until they fill one block .
    • tailSize

      private int tailSize
      Number of actual bytes in tail array.
    • currentPos

      private long currentPos
      Current file position.
    • df

      private final DataFactory df
      Factory object used for encryption and decryption.
  • Constructor Details

    • EncryptedLOBFile

      EncryptedLOBFile(StorageFile lobFile, DataFactory df) throws FileNotFoundException
      Constructs the EncryptedLOBFile object with encryption support.
      Parameters:
      lobFile - StorageFile Object for which file will be created
      df - data factory for encryption and decription
      Throws:
      FileNotFoundException - if the file exists but is a directory or cannot be opened
  • Method Details

    • getBlocks

      private byte[] getBlocks(long pos, int len) throws IOException, StandardException
      Find the blocks containing the data we are interested in.
      Parameters:
      pos - first position we are interested in
      len - number of bytes of interest
      Returns:
      byte array containing all the blocks of data the specified region spans over
      Throws:
      IOException
      StandardException
    • length

      long length() throws IOException
      Returns file length.
      Overrides:
      length in class LOBFile
      Returns:
      file length
      Throws:
      IOException - if an I/O error occurs
    • getFilePointer

      long getFilePointer()
      Returns the currrent position in the file.
      Overrides:
      getFilePointer in class LOBFile
      Returns:
      current position of file pointer
    • seek

      void seek(long pos) throws IOException
      Sets the current file pointer to specific location.
      Overrides:
      seek in class LOBFile
      Parameters:
      pos - new position
      Throws:
      IOException
    • write

      void write(int b) throws IOException, StandardException
      Writes one byte into the file.
      Overrides:
      write in class LOBFile
      Parameters:
      b - byte value
      Throws:
      IOException - if disk operation fails
      StandardException - if error occurred during encryption/decryption
    • write

      void write(byte[] b, int off, int len) throws IOException, StandardException
      Writes length number of bytes from buffer starting from off position.
      Overrides:
      write in class LOBFile
      Parameters:
      b - byte array containing bytes to be written
      off - starting offset of the byte array from where the data should be written to the file
      len - number of bytes to be written
      Throws:
      IOException - if disk operation fails
      StandardException - if error occurred during encryption/decryption
    • write

      void write(byte[] b) throws IOException, StandardException
      Write the buffer into file at current position. It overwrites the data if current position is in the middle of the file and appends into the file if the total length exceeds the file size.
      Overrides:
      write in class LOBFile
      Parameters:
      b - byte array to be written
      Throws:
      IOException - if disk operation fails
      StandardException - if error occurred during encryption/decryption
    • readByte

      int readByte() throws IOException, StandardException
      Reads one byte from file.
      Overrides:
      readByte in class LOBFile
      Returns:
      byte
      Throws:
      IOException - if disk operation fails
      StandardException - if error occurred during decryption
    • read

      int read(byte[] buff, int off, int len) throws IOException, StandardException
      Reads len or remaining bytes in the file (whichever is lower) bytes into buff starting from off position of the buffer.
      Overrides:
      read in class LOBFile
      Parameters:
      buff - byte array to fill read bytes
      off - offset of buff where the byte will be written
      len - number of bytes to be read
      Returns:
      number of bytes read
      Throws:
      IOException - if disk operation fails
      StandardException - if error occurred during decryption
    • setLength

      void setLength(long size) throws IOException, StandardException
      Sets the file length to a given size. If the new size is smaller than the file length the file is truncated.
      Overrides:
      setLength in class LOBFile
      Parameters:
      size - new file size. Must be lower than file length.
      Throws:
      IOException - if file i/o fails
      StandardException - if error occurred during decryption