public class Memoizer extends ReaderWrapper
ReaderWrapper implementation which caches the state of the
 delegate (including and other ReaderWrapper instances)
 after setId(String) has been called.
 Initializing a Bio-Formats reader can consume substantial time and memory.
 Most of the initialization time is spent in the setId(String) call.
 Various factors can impact the performance of this step including the file
 size, the amount of metadata in the image and also the file format itself.
 With the Memoizer reader wrapper, if the time required to call the
 setId(String) method is larger than minimumElapsed, the
 initialized reader including all reader wrappers will be cached in a memo
 file via saveMemo().
 Any subsequent call to setId(String) with a reader decorated by
 the Memoizer on the same input file will load the reader from the memo file
 using loadMemo() instead of performing a full reader
 initialization.
 In essence, the speed-up gained from memoization will happen only after the
 first initialization of the reader for a particular file.| Modifier and Type | Class and Description | 
|---|---|
| static interface  | Memoizer.Deser | 
| static class  | Memoizer.KryoDeser | 
| private static class  | Memoizer.RandomAccessDeserHelper implementation that can be used to implement  Memoizer.Deserclasses for libraries working solely with byte arrays. | 
| Modifier and Type | Field and Description | 
|---|---|
| static long | DEFAULT_MINIMUM_ELAPSEDDefault value for  minimumElapsedif none is provided in the
 constructor. | 
| private java.io.File | directoryDirectory where all memo files should be created. | 
| private boolean | doInPlaceCachingIf  true, then all memo files will be created in the same
 directory as the original file. | 
| private boolean | loadedFromMemoWhether the  ReaderWrapper.readerinstance currently active was loaded from
 the memo file duringsetId(String). | 
| private static org.slf4j.Logger | LOGGERDefault  Loggerfor the memoizer class | 
| private java.io.File | memoFile | 
| private long | minimumElapsedMinimum number of milliseconds which must elapse during the call to
  setId(java.lang.String)before a memo file will be created. | 
| private loci.common.Location | realFile | 
| private MetadataStore | replacementMetadataStoreMetadataStorecreated internally. | 
| private boolean | savedToMemoWhether the  ReaderWrapper.readerinstance was saved to a memo file onsetId(String). | 
| protected Memoizer.Deser | ser | 
| private OMEXMLService | service | 
| private boolean | skipLoad | 
| private boolean | skipSave | 
| private java.io.File | tempFile | 
| private MetadataStore | userMetadataStoreMetadataStoreset by the caller. | 
| static java.lang.Integer | VERSIONDefault file version. | 
| private boolean | versionCheckingBoolean specifying whether to invalidate the memo file based upon
 mismatched major/minor version numbers. | 
readerCAN_GROUP, CANNOT_GROUP, MUST_GROUP| Constructor and Description | 
|---|
| Memoizer()Constructs a memoizer around a new  ImageReadercreating memo
  files under the same directory as the original file only if the call tosetId(java.lang.String)takes longer than 100L in
  milliseconds. | 
| Memoizer(IFormatReader r)Constructs a memoizer around the given  IFormatReadercreating
  memo files under the same directory as the original file only if the
  call tosetId(java.lang.String)takes longer than
  100L in milliseconds. | 
| Memoizer(IFormatReader r,
        java.io.File directory)Constructs a memoizer around the given  IFormatReadercreating
 memo file under thedirectoryargument including the full path of the
 original file only if the call tosetId(java.lang.String)takes longer than
 100L in milliseconds. | 
| Memoizer(IFormatReader r,
        long minimumElapsed)Constructs a memoizer around the given  IFormatReadercreating
  memo files under the same directory as the original file only if the
  call tosetId(java.lang.String)takes longer thanminimumElapsedin
  milliseconds. | 
| Memoizer(IFormatReader r,
        long minimumElapsed,
        java.io.File directory)Constructs a memoizer around the given  IFormatReadercreating
  memo files under thedirectoryargument including the full path
  of the original file only if the call tosetId(java.lang.String)takes longer thanminimumElapsedin milliseconds. | 
| Memoizer(long minimumElapsed)Constructs a memoizer around a new  ImageReadercreating memo
  files under the same directory as the original file only if the call tosetId(java.lang.String)takes longer thanminimumElapsedin milliseconds. | 
| Memoizer(long minimumElapsed,
        java.io.File directory)Constructs a memoizer around a new  ImageReadercreating memo files
  under thedirectoryargument including the full path of the
  original file only if the call tosetId(java.lang.String)takes longer thanminimumElapsedin milliseconds. | 
| Modifier and Type | Method and Description | 
|---|---|
| protected void | cleanup() | 
| void | close() | 
| void | close(boolean fileOnly)Closes the currently open file. | 
| boolean | deleteMemo()Force the current memo file to be deleted, if it exists. | 
| protected boolean | deleteQuietly(java.io.File file)Attempts to delete an existing file, logging at
 warn if the deletion returns false or at error
 if an exception is thrown. | 
| boolean | generateMemo(java.lang.String file)Convenience method to generate (or regenerate) the memo file for a given file. | 
| protected Memoizer.Deser | getDeser()Returns a configured  Kryoinstance. | 
| java.io.File | getMemoFile() | 
| java.io.File | getMemoFile(java.lang.String id)Constructs a  Fileobject fromidstring. | 
| MetadataStore | getMetadataStore()Retrieves the current metadata store for this reader. | 
| protected OMEXMLService | getService() | 
| protected IFormatReader | handleMetadataStore(IFormatReader memo)Return the  IFormatReaderinstance that is passed in or null if
 it has been invalidated, which will include the instance being closed. | 
| boolean | isLoadedFromMemo()Returns whether the  ReaderWrapper.readerinstance currently active was loaded
  from the memo file duringsetId(String). | 
| boolean | isSavedToMemo()Returns whether the  ReaderWrapper.readerinstance currently active was saved
  to the memo file duringsetId(String). | 
| boolean | isVersionChecking()Returns whether or not version checking is done based upon major/minor
 version numbers. | 
| protected boolean | isWritableDirectory(java.io.File writeDirectory)Test if the given  Fileinstance is a writable directory. | 
| private static void | load(java.lang.String id,
    java.io.File tmp,
    boolean delete) | 
| IFormatReader | loadMemo()Load a memo file if possible, returning a null if not. | 
| static void | main(java.lang.String[] args) | 
| boolean | saveMemo()Save a reader including all reader wrappers inside a memo file. | 
| void | setId(java.lang.String id)Sets the current file name. | 
| void | setMetadataStore(MetadataStore store)Sets the default metadata store for this reader. | 
| void | setVersionChecking(boolean version)Set whether version checking is done based upon major/minor version
 numbers. | 
| void | skipSave(boolean skip)Set whether a memo file should be saved if a valid file is not present. | 
| protected org.perf4j.slf4j.Slf4JStopWatch | stopWatch() | 
| boolean | versionMismatch()Returns  trueif the version of the memo file as returned byMemoizer.Deser.loadReleaseVersion()andMemoizer.Deser.loadRevision()do not match the current version as specified byFormatTools.VERSION. | 
coreIndexToSeries, duplicate, fileGroupOption, get16BitLookupTable, get8BitLookupTable, getAdvancedSeriesUsedFiles, getAdvancedUsedFiles, getBitsPerPixel, getCoreIndex, getCoreMetadataList, getCurrentFile, getDatasetStructureDescription, getDimensionOrder, getDomains, getEffectiveSizeC, getFillColor, getFormat, getGlobalMetadata, getImageCount, getIndex, getIndex, getMetadataOptions, getMetadataStoreRoot, getMetadataValue, getModuloC, getModuloT, getModuloZ, getNativeDataType, getOptimalTileHeight, getOptimalTileWidth, getPixelType, getPossibleDomains, getReader, getRequiredDirectories, getResolution, getResolutionCount, getRGBChannelCount, getSeries, getSeriesCount, getSeriesMetadata, getSeriesMetadataValue, getSeriesUsedFiles, getSeriesUsedFiles, getSizeC, getSizeT, getSizeX, getSizeY, getSizeZ, getSuffixes, getSupportedMetadataLevels, getThumbSizeX, getThumbSizeY, getTileCodec, getTileCodecOptions, getTileColumns, getTileRows, getUnderlyingReaders, getUsedFiles, getUsedFiles, getZCTCoords, getZCTModuloCoords, hasCompanionFiles, hasFlattenedResolutions, isFalseColor, isGroupFiles, isIndexed, isInterleaved, isInterleaved, isLittleEndian, isMetadataComplete, isMetadataFiltered, isNormalized, isOrderCertain, isOriginalMetadataPopulated, isRGB, isSingleFile, isThisType, isThisType, isThisType, isThisType, isThumbnailSeries, openBytes, openBytes, openBytes, openBytes, openCompressedBytes, openCompressedBytes, openPlane, openThumbBytes, reopenFile, seriesToCoreIndex, setCoreIndex, setFillColor, setFlattenedResolutions, setGroupFiles, setMetadataFiltered, setMetadataOptions, setNormalized, setOriginalMetadataPopulated, setResolution, setSeries, unwrap, unwrap, unwrappublic static final java.lang.Integer VERSION
public static final long DEFAULT_MINIMUM_ELAPSED
minimumElapsed if none is provided in the
 constructor.private static final org.slf4j.Logger LOGGER
Logger for the memoizer classprivate final long minimumElapsed
setId(java.lang.String) before a memo file will be created. Default to
 DEFAULT_MINIMUM_ELAPSED if not specified via the constructor.private final java.io.File directory
doInPlaceCaching.private boolean doInPlaceCaching
true, then all memo files will be created in the same
 directory as the original file.protected transient Memoizer.Deser ser
private transient OMEXMLService service
private loci.common.Location realFile
private java.io.File memoFile
private java.io.File tempFile
private boolean skipLoad
private boolean skipSave
private boolean versionChecking
private boolean loadedFromMemo
ReaderWrapper.reader instance currently active was loaded from
 the memo file during setId(String).private boolean savedToMemo
ReaderWrapper.reader instance was saved to a memo file on
 setId(String).private MetadataStore userMetadataStore
MetadataStore set by the caller. This value will be held locally
 and not set on the ReaderWrapper.reader delegate until the execution
 of setId(String). If no value has been set by the caller, then
 no special actions are taken during setId(String). If a value
 is set, however, we must be careful with attempting to serialize ithandleMetadataStore(IFormatReader)private MetadataStore replacementMetadataStore
MetadataStore created internally.handleMetadataStore(IFormatReader)public Memoizer()
ImageReader creating memo
  files under the same directory as the original file only if the call to
  setId(java.lang.String) takes longer than 100L in
  milliseconds.public Memoizer(long minimumElapsed)
ImageReader creating memo
  files under the same directory as the original file only if the call to
  setId(java.lang.String) takes longer than minimumElapsed in milliseconds.minimumElapsed - a long specifying the number of milliseconds which
         must elapse during the call to setId(java.lang.String) before a memo file
         will be created.public Memoizer(long minimumElapsed,
                java.io.File directory)
ImageReader creating memo files
  under the directory argument including the full path of the
  original file only if the call to setId(java.lang.String) takes longer than
  minimumElapsed in milliseconds.minimumElapsed - a long specifying the number of milliseconds which
         must elapse during the call to setId(java.lang.String) before a memo file
         will be created.directory - a File specifying the directory where all memo
         files should be created. If null, disable memoization.public Memoizer(IFormatReader r)
IFormatReader creating
  memo files under the same directory as the original file only if the
  call to setId(java.lang.String) takes longer than
  100L in milliseconds.r - an IFormatReader instance.
         If null, a new ImageReader is created.public Memoizer(IFormatReader r, long minimumElapsed)
IFormatReader creating
  memo files under the same directory as the original file only if the
  call to setId(java.lang.String) takes longer than minimumElapsed in
  milliseconds.r - an IFormatReader instance
         If null, a new ImageReader is created.minimumElapsed - a long specifying the number of milliseconds which
         must elapse during the call to setId(java.lang.String) before a memo file
         will be created.public Memoizer(IFormatReader r, java.io.File directory)
IFormatReader creating
 memo file under the directory argument including the full path of the
 original file only if the call to setId(java.lang.String) takes longer than
 100L in milliseconds.r - an IFormatReader instance
        If null, a new ImageReader is created.directory - a File specifying the directory where all memo
        files should be created. If null, disable memoization.public Memoizer(IFormatReader r, long minimumElapsed, java.io.File directory)
IFormatReader creating
  memo files under the directory argument including the full path
  of the original file only if the call to setId(java.lang.String) takes longer than
  minimumElapsed in milliseconds.r - an IFormatReader instance
         If null, a new ImageReader is created.minimumElapsed - a long specifying the number of milliseconds which
         must elapse during the call to setId(java.lang.String) before a memo file
         will be created.directory - a File specifying the directory where all memo
         files should be created. If null, disable memoization.public boolean isLoadedFromMemo()
ReaderWrapper.reader instance currently active was loaded
  from the memo file during setId(String).true if the reader was loaded from the memo file,
  false otherwise.public boolean isSavedToMemo()
ReaderWrapper.reader instance currently active was saved
  to the memo file during setId(String).true if the reader was saved to the memo file,
  false otherwise.public boolean isVersionChecking()
true if version checking is done based upon
  major/minor version numbers, false otherwise.public boolean versionMismatch()
                        throws java.io.IOException
true if the version of the memo file as returned by
 Memoizer.Deser.loadReleaseVersion() and Memoizer.Deser.loadRevision()
 do not match the current version as specified by FormatTools.VERSION.java.io.IOExceptionpublic void setVersionChecking(boolean version)
true, then a mismatch between the major/minor version of the
 calling code (e.g. 4.4) and the major/minor version saved in the memo
 file (e.g. 5.0) will result in the memo file being invalidated.
 If false (default), a mismatch in the Git commit hashes will
 invalidate the memo file.
 This method allows for less strict version checking.version - a boolean specifying whether version checking is done
  based upon major/minor version numbers to invalidate the memo filepublic void skipSave(boolean skip)
false (default), then a memo file will be saved.  This may
 cause an existing memo file to be overwritten.
 If true, then a memo file will not be saved.  This effectively
 makes the current Memoizer read-only.protected void cleanup()
public void close()
           throws java.io.IOException
close in interface java.io.Closeableclose in interface java.lang.AutoCloseableclose in class ReaderWrapperjava.io.IOExceptionpublic void close(boolean fileOnly)
           throws java.io.IOException
IFormatReaderCloseable.close().close in interface IFormatReaderclose in class ReaderWrapperjava.io.IOExceptionpublic void setId(java.lang.String id)
           throws FormatException,
                  java.io.IOException
IFormatHandlersetId in interface IFormatHandlersetId in class ReaderWrapperFormatExceptionjava.io.IOExceptionpublic void setMetadataStore(MetadataStore store)
IFormatReadersetMetadataStore in interface IFormatReadersetMetadataStore in class ReaderWrapperstore - a metadata store implementation.public MetadataStore getMetadataStore()
IFormatReadernull
 metadata store.getMetadataStore in interface IFormatReadergetMetadataStore in class ReaderWrapperprotected boolean deleteQuietly(java.io.File file)
File.delete() or false if
 an exception is thrown.protected Memoizer.Deser getDeser()
Kryo instance. This method can be modified
 by consumers. The returned instance is not thread-safe.Kryo instance.protected OMEXMLService getService() throws MissingLibraryException
MissingLibraryExceptionprotected org.perf4j.slf4j.Slf4JStopWatch stopWatch()
public java.io.File getMemoFile(java.lang.String id)
File object from id string. This method
 can be modified by consumers, but then existing memo files will not be
 found.id - the path passed to setId(java.lang.String)File object pointing at the location of the memo fileprotected boolean isWritableDirectory(java.io.File writeDirectory)
File instance is a writable directory.writeDirectory - a possible writable directoryFile is indeed a writable directorypublic IFormatReader loadMemo() throws java.io.IOException, FormatException
java.io.IOExceptionFormatExceptionpublic boolean saveMemo()
public boolean deleteMemo()
public java.io.File getMemoFile()
protected IFormatReader handleMetadataStore(IFormatReader memo) throws MissingLibraryException
IFormatReader instance that is passed in or null if
 it has been invalidated, which will include the instance being closed.
 MetadataStore
  implementation is passed in when no memo file exists, then a replacement
  MetadataStore will be created and set on the ReaderWrapper.reader
  delegate before calling ReaderWrapper.setId(String). This stack
  will then be serialized, before any values are copied into
  userMetadataStore.
  MetadataStore
  implementation is set before calling setId(String) then ...
  MissingLibraryExceptionpublic boolean generateMemo(java.lang.String file)
                     throws java.io.IOException
file - the file for which to generate a memo filejava.io.IOExceptionpublic static void main(java.lang.String[] args)
                 throws java.lang.Exception
java.lang.Exceptionprivate static void load(java.lang.String id,
                         java.io.File tmp,
                         boolean delete)
                  throws java.lang.Exception
java.lang.ExceptionCopyright © 2025 Open Microscopy Environment