Skip to content

Commit e1b9cf9

Browse files
committed
refactor: move LazyRead into KeyValueAccess
* remove unused KeyValueAccessLazyReadData * make KeyValueAccessReadData package-private
1 parent 8b69fa7 commit e1b9cf9

7 files changed

Lines changed: 64 additions & 154 deletions

File tree

src/main/java/org/janelia/saalfeldlab/n5/FileSystemKeyValueAccess.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@
8686
import java.util.Iterator;
8787
import java.util.stream.Stream;
8888

89-
import org.janelia.saalfeldlab.n5.readdata.KeyValueAccessReadData;
90-
import org.janelia.saalfeldlab.n5.readdata.LazyRead;
9189
import org.janelia.saalfeldlab.n5.readdata.ReadData;
9290

9391
/**

src/main/java/org/janelia/saalfeldlab/n5/HttpKeyValueAccess.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333
import org.apache.commons.lang3.function.TriFunction;
3434
import org.janelia.saalfeldlab.n5.N5Exception.N5IOException;
3535
import org.janelia.saalfeldlab.n5.http.ListResponseParser;
36-
import org.janelia.saalfeldlab.n5.readdata.KeyValueAccessReadData;
37-
import org.janelia.saalfeldlab.n5.readdata.LazyRead;
3836
import org.janelia.saalfeldlab.n5.readdata.ReadData;
3937

4038
import java.io.Closeable;

src/main/java/org/janelia/saalfeldlab/n5/KeyValueAccess.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,4 +363,47 @@ default URI uri(final String uriString) throws URISyntaxException {
363363
* if an error occurs during deletion
364364
*/
365365
public void delete(final String normalPath) throws N5IOException;
366+
367+
/**
368+
* A lazy reading strategy for lazy, partial reading of data from some source.
369+
* <p>
370+
* Implementations of this interface handle the specifics of accessing data from
371+
* their respective sources.
372+
*
373+
* @see ReadData
374+
* @see KeyValueAccessReadData
375+
*/
376+
interface LazyRead {
377+
378+
/**
379+
* Materializes a portion of the data into a concrete {@link ReadData}
380+
* instance.
381+
* <p>
382+
* This method performs the actual read operation from the underlying
383+
* source, loading only the requested portion of data. The implementation
384+
* should handle bounds checking and throw appropriate exceptions for
385+
* invalid ranges.
386+
*
387+
* @param offset
388+
* the starting position in the data source
389+
* @param length
390+
* the number of bytes to read, or -1 to read from offset to end
391+
* @return a materialized {@link ReadData} instance containing the requested
392+
* data
393+
* @throws N5IOException
394+
* if any I/O error occurs
395+
*/
396+
ReadData materialize(long offset, long length) throws N5IOException;
397+
398+
/**
399+
* Returns the total size of the data source in bytes.
400+
*
401+
* @return the size of the data source in bytes
402+
* @throws N5IOException
403+
* if an I/O error occurs while trying to get the length
404+
*/
405+
long size() throws N5IOException;
406+
407+
}
408+
366409
}

src/main/java/org/janelia/saalfeldlab/n5/KeyValueAccessLazyReadData.java

Lines changed: 0 additions & 112 deletions
This file was deleted.

src/main/java/org/janelia/saalfeldlab/n5/readdata/KeyValueAccessReadData.java renamed to src/main/java/org/janelia/saalfeldlab/n5/KeyValueAccessReadData.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
1-
package org.janelia.saalfeldlab.n5.readdata;
1+
package org.janelia.saalfeldlab.n5;
22

33
import java.io.InputStream;
44

5+
import org.janelia.saalfeldlab.n5.KeyValueAccess.LazyRead;
56
import org.janelia.saalfeldlab.n5.N5Exception.N5IOException;
7+
import org.janelia.saalfeldlab.n5.readdata.ReadData;
68

9+
/**
10+
* A {@link ReadData} implementation that reads from a {@link KeyValueAccess}
11+
* backend through a {@link LazyRead} object.
12+
*/
713
public class KeyValueAccessReadData implements ReadData {
814

915
private final LazyRead lazyRead;
1016
private ReadData materialized;
1117
private final long offset;
1218
private long length;
1319

14-
public KeyValueAccessReadData(LazyRead lazyRead) {
20+
KeyValueAccessReadData(LazyRead lazyRead) {
1521
this(lazyRead, 0, -1);
1622
}
1723

18-
public KeyValueAccessReadData(final LazyRead lazyRead, final long offset, final long length) {
24+
KeyValueAccessReadData(final LazyRead lazyRead, final long offset, final long length) {
1925
this.lazyRead = lazyRead;
2026
this.offset = offset;
2127
this.length = length;
@@ -28,6 +34,18 @@ public ReadData materialize() throws N5IOException {
2834
return materialized;
2935
}
3036

37+
/**
38+
* Returns a {@link ReadData} whose length is limited to the given value.
39+
* <p>
40+
* This implementation defers a material read operation if allowed
41+
* by the {@link LazyRead}.
42+
*
43+
* @param length
44+
* the length of the resulting ReadData
45+
* @return a length-limited ReadData
46+
* @throws N5IOException
47+
* if an I/O error occurs while trying to get the length
48+
*/
3149
@Override
3250
public ReadData slice(final long offset, final long length) throws N5IOException {
3351
if (offset < 0)

src/main/java/org/janelia/saalfeldlab/n5/readdata/LazyRead.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/main/java/org/janelia/saalfeldlab/n5/readdata/LazyReadData.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import java.io.InputStream;
3434
import java.io.OutputStream;
3535
import org.apache.commons.io.output.ProxyOutputStream;
36-
import org.janelia.saalfeldlab.n5.N5Exception;
3736
import org.janelia.saalfeldlab.n5.N5Exception.N5IOException;
3837

3938
class LazyReadData implements ReadData {

0 commit comments

Comments
 (0)