File tree 2 files changed +29
-0
lines changed
formats-api/src/loci/formats
formats-bsd/src/loci/formats
2 files changed +29
-0
lines changed Original file line number Diff line number Diff line change @@ -150,6 +150,24 @@ public ImageReader(ClassList<IFormatReader> classList) {
150
150
151
151
// -- ImageReader API methods --
152
152
153
+ /**
154
+ * Intended for use prior to caching an initialized reader.
155
+ * This removes everything except the current reader from the
156
+ * list of possible readers to use. Be very careful, and do
157
+ * not call this method on an ImageReader that may be reused
158
+ * for multiple different files.
159
+ *
160
+ * If the current reader index is less than 0 (i.e. not initialized),
161
+ * this does nothing.
162
+ */
163
+ protected void cleanupReaderList () {
164
+ if (current >= 0 ) {
165
+ IFormatReader currentReader = readers [current ];
166
+ current = 0 ;
167
+ readers = new IFormatReader [] {currentReader };
168
+ }
169
+ }
170
+
153
171
/**
154
172
* Toggles whether or not file system access is allowed when doing type
155
173
* detection. By default, file system access is allowed.
Original file line number Diff line number Diff line change @@ -208,6 +208,17 @@ public void saveRevision(String revision) {
208
208
209
209
@ Override
210
210
public void saveReader (IFormatReader reader ) {
211
+ // clean up reader list in any instances of ImageReader
212
+ IFormatReader r = reader ;
213
+ while (r instanceof ReaderWrapper || r instanceof ImageReader ) {
214
+ if (r instanceof ImageReader ) {
215
+ ImageReader ir = (ImageReader ) r ;
216
+ ir .cleanupReaderList ();
217
+ r = ir .getReader ();
218
+ }
219
+ else r = ((ReaderWrapper ) r ).getReader ();
220
+ }
221
+
211
222
kryo .writeObject (output , reader .getClass ());
212
223
kryo .writeObject (output , reader );
213
224
}
You can’t perform that action at this time.
0 commit comments