This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 1685cdc175450789c46dc4336c3406ee33579327
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Mon Aug 21 14:06:24 2023 +0200

    Rename `org.apache.sis.internal.storage.io` as `org.apache.sis.io.stream`.
    This package is not exported, so it still not visible to users.
    But it is widely used in various Apache SIS modules.
---
 .../org/apache/sis/cloud/aws/s3/CachedByteChannel.java |  2 +-
 .../apache/sis/internal/coverage/RangeArgument.java    |  2 +-
 .../org/apache/sis/storage/geotiff/DataSubset.java     |  6 +++---
 .../org/apache/sis/storage/geotiff/GeoTiffStore.java   |  4 ++--
 .../apache/sis/storage/geotiff/ImageFileDirectory.java |  2 +-
 .../org/apache/sis/storage/geotiff/NativeMetadata.java |  2 +-
 .../main/org/apache/sis/storage/geotiff/Reader.java    |  2 +-
 .../sis/storage/geotiff/ReversedBitsChannel.java       |  2 +-
 .../main/org/apache/sis/storage/geotiff/Type.java      |  2 +-
 .../apache/sis/storage/geotiff/inflater/CCITTRLE.java  |  2 +-
 .../storage/geotiff/inflater/CompressionChannel.java   |  2 +-
 .../sis/storage/geotiff/inflater/CopyFromBytes.java    |  2 +-
 .../apache/sis/storage/geotiff/inflater/Inflater.java  |  2 +-
 .../org/apache/sis/storage/geotiff/inflater/LZW.java   |  2 +-
 .../apache/sis/storage/geotiff/inflater/PackBits.java  |  2 +-
 .../org/apache/sis/storage/geotiff/inflater/ZIP.java   |  2 +-
 .../apache/sis/storage/geotiff/spi/SchemaModifier.java |  2 +-
 .../test/org/apache/sis/storage/geotiff/TypeTest.java  |  2 +-
 .../sis/storage/geotiff/inflater/CCITTRLETest.java     |  2 +-
 .../org/apache/sis/storage/netcdf/MetadataReader.java  |  2 +-
 .../apache/sis/storage/netcdf/NetcdfStoreProvider.java |  4 ++--
 .../apache/sis/storage/netcdf/base/GridCacheKey.java   |  2 +-
 .../sis/storage/netcdf/classic/ChannelDecoder.java     |  2 +-
 .../sis/storage/netcdf/classic/VariableInfo.java       |  6 +++---
 .../sis/storage/netcdf/classic/ChannelDecoderTest.java |  2 +-
 .../apache/sis/storage/sql/feature/SchemaModifier.java |  2 +-
 .../apache/sis/storage/sql/postgis/RasterReader.java   |  4 ++--
 .../apache/sis/storage/sql/postgis/RasterWriter.java   |  2 +-
 .../apache/sis/storage/sql/postgis/PostgresTest.java   |  2 +-
 .../sis/storage/sql/postgis/RasterReaderTest.java      |  2 +-
 .../sis/storage/sql/postgis/RasterWriterTest.java      |  2 +-
 .../org/apache/sis/storage/sql/postgis/TestRaster.java |  4 ++--
 .../org/apache/sis/storage/xml/stream/OutputType.java  |  2 +-
 .../apache/sis/storage/xml/stream/StaxDataStore.java   |  6 +++---
 .../sis/storage/xml/stream/StaxStreamReader.java       |  2 +-
 .../sis/storage/xml/stream/StaxStreamWriter.java       |  2 +-
 .../src/org.apache.sis.storage/main/module-info.java   |  2 +-
 .../org/apache/sis/internal/storage/PRJDataStore.java  |  2 +-
 .../org/apache/sis/internal/storage/URIDataStore.java  |  2 +-
 .../sis/internal/storage/WritableResourceSupport.java  |  4 ++--
 .../storage/io => io/stream}/ByteRangeChannel.java     |  2 +-
 .../{internal/storage/io => io/stream}/ByteWriter.java |  2 +-
 .../storage/io => io/stream}/ChannelData.java          |  2 +-
 .../storage/io => io/stream}/ChannelDataInput.java     |  2 +-
 .../storage/io => io/stream}/ChannelDataOutput.java    |  2 +-
 .../storage/io => io/stream}/ChannelFactory.java       |  2 +-
 .../io => io/stream}/ChannelImageInputStream.java      |  2 +-
 .../io => io/stream}/ChannelImageOutputStream.java     |  2 +-
 .../storage/io => io/stream}/DataTransfer.java         |  2 +-
 .../storage/io => io/stream}/FileCacheByteChannel.java |  2 +-
 .../storage/io => io/stream}/HttpByteChannel.java      |  2 +-
 .../storage/io => io/stream}/HyperRectangleReader.java |  2 +-
 .../storage/io => io/stream}/IOUtilities.java          |  2 +-
 .../storage/io => io/stream}/InputStreamAdapter.java   |  2 +-
 .../io => io/stream}/InputStreamArrayGetter.java       |  2 +-
 .../storage/io => io/stream}/InternalOptionKey.java    |  2 +-
 .../{internal/storage/io => io/stream}/Markable.java   |  2 +-
 .../storage/io => io/stream}/MemoryDataTransfer.java   |  2 +-
 .../storage/io => io/stream}/NullChannel.java          |  2 +-
 .../storage/io => io/stream}/OutputStreamAdapter.java  |  2 +-
 .../sis/{internal/storage/io => io/stream}/Region.java |  2 +-
 .../storage/io => io/stream}/RewindableLineReader.java |  2 +-
 .../storage/io => io/stream}/package-info.java         |  2 +-
 .../sis/storage/AbstractGridCoverageResource.java      |  2 +-
 .../apache/sis/storage/DataStoreClosedException.java   |  2 +-
 .../org/apache/sis/storage/DataStoreException.java     |  2 +-
 .../main/org/apache/sis/storage/DataStoreProvider.java |  4 ++--
 .../sis/storage/ForwardOnlyStorageException.java       |  2 +-
 .../main/org/apache/sis/storage/ProbeReader.java       |  2 +-
 .../main/org/apache/sis/storage/StorageConnector.java  | 18 +++++++++---------
 .../sis/storage/UnsupportedStorageException.java       |  2 +-
 .../main/org/apache/sis/storage/csv/Store.java         |  4 ++--
 .../org/apache/sis/storage/esri/AsciiGridStore.java    |  2 +-
 .../org/apache/sis/storage/esri/CharactersView.java    |  2 +-
 .../org/apache/sis/storage/esri/RawRasterReader.java   |  6 +++---
 .../org/apache/sis/storage/esri/RawRasterStore.java    |  2 +-
 .../org/apache/sis/storage/esri/WritableStore.java     |  2 +-
 .../org/apache/sis/storage/image/FormatFinder.java     |  2 +-
 .../apache/sis/storage/image/WorldFileResource.java    |  2 +-
 .../sis/storage/image/WorldFileStoreProvider.java      |  2 +-
 .../org/apache/sis/storage/wkt/FirstKeywordPeek.java   |  2 +-
 .../org/apache/sis/storage/xml/AbstractProvider.java   |  2 +-
 .../storage/io => io/stream}/ByteArrayChannel.java     |  2 +-
 .../storage/io => io/stream}/ChannelDataInputTest.java |  2 +-
 .../io => io/stream}/ChannelDataOutputTest.java        |  2 +-
 .../storage/io => io/stream}/ChannelDataTestCase.java  |  2 +-
 .../io => io/stream}/ChannelImageInputStreamTest.java  |  2 +-
 .../io => io/stream}/ChannelImageOutputStreamTest.java |  2 +-
 .../storage/io => io/stream}/ComputedInputStream.java  |  2 +-
 .../storage/io => io/stream}/DripByteChannel.java      |  2 +-
 .../io => io/stream}/FileCacheByteChannelTest.java     |  2 +-
 .../io => io/stream}/HyperRectangleReaderTest.java     |  2 +-
 .../storage/io => io/stream}/IOUtilitiesTest.java      |  2 +-
 .../io => io/stream}/ImageInputStreamComparator.java   |  2 +-
 .../io => io/stream}/InputStreamArrayGetterTest.java   |  2 +-
 .../io => io/stream}/MemoryCacheImageOutputStream.java |  2 +-
 .../io => io/stream}/RewindableLineReaderTest.java     |  2 +-
 .../org/apache/sis/storage/StorageConnectorTest.java   |  8 ++++----
 .../main/org/apache/sis/gui/SystemMonitor.java         |  2 +-
 .../main/org/apache/sis/gui/dataset/PathAction.java    |  2 +-
 .../main/org/apache/sis/gui/dataset/ResourceCell.java  |  2 +-
 .../main/org/apache/sis/gui/dataset/ResourceTree.java  |  2 +-
 .../org/apache/sis/gui/internal/DataStoreOpener.java   |  6 +++---
 .../org/apache/sis/gui/internal/io/FileAccessItem.java |  2 +-
 .../org/apache/sis/gui/internal/io/FileAccessView.java |  4 ++--
 105 files changed, 134 insertions(+), 134 deletions(-)

diff --git 
a/endorsed/src/org.apache.sis.cloud.aws/main/org/apache/sis/cloud/aws/s3/CachedByteChannel.java
 
b/endorsed/src/org.apache.sis.cloud.aws/main/org/apache/sis/cloud/aws/s3/CachedByteChannel.java
index a93f3ba346..3f1c6f528c 100644
--- 
a/endorsed/src/org.apache.sis.cloud.aws/main/org/apache/sis/cloud/aws/s3/CachedByteChannel.java
+++ 
b/endorsed/src/org.apache.sis.cloud.aws/main/org/apache/sis/cloud/aws/s3/CachedByteChannel.java
@@ -18,7 +18,7 @@ package org.apache.sis.cloud.aws.s3;
 
 import java.util.List;
 import java.io.IOException;
-import org.apache.sis.internal.storage.io.FileCacheByteChannel;
+import org.apache.sis.io.stream.FileCacheByteChannel;
 import software.amazon.awssdk.services.s3.model.GetObjectRequest;
 import software.amazon.awssdk.services.s3.model.GetObjectResponse;
 import software.amazon.awssdk.core.ResponseInputStream;
diff --git 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/internal/coverage/RangeArgument.java
 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/internal/coverage/RangeArgument.java
index 3815f507ac..1bcd4c6301 100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/internal/coverage/RangeArgument.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/internal/coverage/RangeArgument.java
@@ -269,7 +269,7 @@ public final class RangeArgument {
      * {@link java.awt.image.BandedSampleModel} fashion). This method converts 
the specified domain
      * (decomposed in {@code areaOfInterest} and {@code subsampling} 
parameters) into a larger domain
      * encompassing band dimension as if it was an ordinary space or time 
dimension. It makes possible
-     * to use this domain with {@link 
org.apache.sis.internal.storage.io.HyperRectangleReader} for example.
+     * to use this domain with {@link 
org.apache.sis.io.stream.HyperRectangleReader} for example.
      *
      * @param  areaOfInterest  the extent to which to add a new dimension for 
bands.
      * @param  bandDimension   index of the band dimension.
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
index e823c6f608..7fa9513127 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataSubset.java
@@ -32,14 +32,14 @@ import org.apache.sis.image.DataType;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.internal.util.Numerics;
-import org.apache.sis.internal.storage.io.Region;
-import org.apache.sis.internal.storage.io.HyperRectangleReader;
+import org.apache.sis.io.stream.Region;
+import org.apache.sis.io.stream.HyperRectangleReader;
 import org.apache.sis.internal.storage.TiledGridCoverage;
 import org.apache.sis.internal.storage.TiledGridResource;
 import org.apache.sis.internal.coverage.j2d.TilePlaceholder;
 import org.apache.sis.internal.coverage.j2d.ImageUtilities;
 import org.apache.sis.internal.coverage.j2d.RasterFactory;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.geotiff.internal.Resources;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.util.Localized;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java
index 5dc297ff87..fdf5e28241 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/GeoTiffStore.java
@@ -45,8 +45,8 @@ import org.apache.sis.storage.event.StoreEvent;
 import org.apache.sis.storage.event.StoreListener;
 import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.storage.event.WarningEvent;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.internal.storage.MetadataBuilder;
 import org.apache.sis.internal.storage.StoreUtilities;
 import org.apache.sis.internal.storage.URIDataStore;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ImageFileDirectory.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ImageFileDirectory.java
index 02bfd01c03..03c6c06296 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ImageFileDirectory.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ImageFileDirectory.java
@@ -40,7 +40,7 @@ import org.apache.sis.storage.geotiff.internal.Resources;
 import org.apache.sis.storage.geotiff.internal.Predictor;
 import org.apache.sis.storage.geotiff.internal.Compression;
 import org.apache.sis.internal.storage.MetadataBuilder;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.internal.coverage.j2d.ColorModelFactory;
 import org.apache.sis.internal.coverage.j2d.SampleModelFactory;
 import org.apache.sis.internal.util.UnmodifiableArrayList;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/NativeMetadata.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/NativeMetadata.java
index fe8ceb55ee..7d273f79a9 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/NativeMetadata.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/NativeMetadata.java
@@ -29,7 +29,7 @@ import org.apache.sis.util.resources.Vocabulary;
 import org.apache.sis.util.collection.TreeTable;
 import org.apache.sis.util.collection.TableColumn;
 import org.apache.sis.util.collection.DefaultTreeTable;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.geotiff.internal.Compression;
 import org.apache.sis.storage.geotiff.internal.Predictor;
 
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Reader.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Reader.java
index e07cff200b..02affe288a 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Reader.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Reader.java
@@ -28,7 +28,7 @@ import org.opengis.util.NameFactory;
 import org.apache.sis.storage.GridCoverageResource;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreContentException;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.geotiff.internal.Resources;
 import org.apache.sis.util.iso.DefaultNameFactory;
 import org.apache.sis.util.resources.Errors;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ReversedBitsChannel.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ReversedBitsChannel.java
index b00aa6978b..afa9462c95 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ReversedBitsChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/ReversedBitsChannel.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.channels.ReadableByteChannel;
 import java.nio.channels.SeekableByteChannel;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.util.resources.Errors;
 
 
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Type.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Type.java
index 17819c544b..b2d5b877f5 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Type.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/Type.java
@@ -20,7 +20,7 @@ import java.util.Arrays;
 import java.io.IOException;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.internal.util.Numerics;
 import org.apache.sis.math.DecimalFunctions;
 import org.apache.sis.math.Fraction;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
index 2b9156aafc..a2df25406c 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CCITTRLE.java
@@ -19,7 +19,7 @@ package org.apache.sis.storage.geotiff.inflater;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import org.apache.sis.storage.event.StoreListeners;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 
 
 /**
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CompressionChannel.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CompressionChannel.java
index fda45708d7..e126da0c27 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CompressionChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CompressionChannel.java
@@ -22,7 +22,7 @@ import java.nio.ByteBuffer;
 import org.apache.sis.math.MathFunctions;
 import org.apache.sis.internal.util.Numerics;
 import org.apache.sis.storage.geotiff.internal.Resources;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.storage.StorageConnector;
 
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CopyFromBytes.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CopyFromBytes.java
index 2fc55bf17a..1cfd5a9674 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CopyFromBytes.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/CopyFromBytes.java
@@ -24,7 +24,7 @@ import java.nio.IntBuffer;
 import java.nio.FloatBuffer;
 import java.nio.DoubleBuffer;
 import org.apache.sis.image.DataType;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.UnsupportedEncodingException;
 import org.apache.sis.util.resources.Errors;
 
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
index af8a8022ca..bf17f92967 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/Inflater.java
@@ -26,7 +26,7 @@ import org.apache.sis.internal.util.Numerics;
 import org.apache.sis.storage.geotiff.internal.Compression;
 import org.apache.sis.storage.geotiff.internal.Predictor;
 import org.apache.sis.storage.geotiff.internal.Resources;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.UnsupportedEncodingException;
 import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.util.ArgumentChecks;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
index 5984b79ffe..3f05b13808 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/LZW.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import java.io.EOFException;
 import java.nio.ByteBuffer;
 import org.apache.sis.storage.geotiff.internal.Resources;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.event.StoreListeners;
 
 
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
index f42f004a68..c34caa9bf8 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/PackBits.java
@@ -19,7 +19,7 @@ package org.apache.sis.storage.geotiff.inflater;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import org.apache.sis.storage.event.StoreListeners;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 
 
 /**
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/ZIP.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/ZIP.java
index dac9017b65..67b035ae07 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/ZIP.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/inflater/ZIP.java
@@ -22,7 +22,7 @@ import java.nio.BufferOverflowException;
 import java.util.zip.Inflater;
 import java.util.zip.DataFormatException;
 import org.apache.sis.storage.event.StoreListeners;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 
 
 /**
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/spi/SchemaModifier.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/spi/SchemaModifier.java
index 5da2ee482d..d3bcd92dab 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/spi/SchemaModifier.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/spi/SchemaModifier.java
@@ -20,7 +20,7 @@ import org.apache.sis.coverage.SampleDimension;
 import org.apache.sis.measure.NumberRange;
 import org.apache.sis.metadata.iso.DefaultMetadata;
 import org.apache.sis.setup.OptionKey;
-import org.apache.sis.internal.storage.io.InternalOptionKey;
+import org.apache.sis.io.stream.InternalOptionKey;
 import org.apache.sis.storage.DataStoreException;
 import org.opengis.metadata.Metadata;
 import org.opengis.util.GenericName;
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/TypeTest.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/TypeTest.java
index 5a1cf4935f..63897e3a01 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/TypeTest.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/TypeTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.storage.geotiff;
 
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
 
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/inflater/CCITTRLETest.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/inflater/CCITTRLETest.java
index d223620121..7a1cd64612 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/inflater/CCITTRLETest.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/test/org/apache/sis/storage/geotiff/inflater/CCITTRLETest.java
@@ -21,7 +21,7 @@ import java.util.ArrayList;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.lang.reflect.Field;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.test.TestUtilities;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
index 9372dba141..f16dcc12d7 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -61,7 +61,7 @@ import org.apache.sis.storage.netcdf.base.Variable;
 import org.apache.sis.storage.netcdf.base.VariableRole;
 import org.apache.sis.storage.netcdf.base.Dimension;
 import org.apache.sis.storage.netcdf.base.Grid;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.internal.storage.MetadataBuilder;
 import org.apache.sis.storage.wkt.StoreFormat;
 import org.apache.sis.internal.referencing.AxisDirections;
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java
index 92ec81b6ff..6a1d2f649f 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/NetcdfStoreProvider.java
@@ -30,8 +30,8 @@ import org.apache.sis.storage.netcdf.base.Decoder;
 import org.apache.sis.storage.netcdf.internal.Resources;
 import org.apache.sis.storage.netcdf.classic.ChannelDecoder;
 import org.apache.sis.storage.netcdf.ucar.DecoderWrapper;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.internal.storage.StoreMetadata;
 import org.apache.sis.internal.storage.Capability;
 import org.apache.sis.internal.storage.URIDataStore;
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridCacheKey.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridCacheKey.java
index 4f7a98b0dc..64a0678feb 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridCacheKey.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/base/GridCacheKey.java
@@ -23,7 +23,7 @@ import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import org.apache.sis.util.collection.Cache;
 import org.apache.sis.internal.util.Strings;
-import org.apache.sis.internal.storage.io.ByteWriter;
+import org.apache.sis.io.stream.ByteWriter;
 import org.apache.sis.math.Vector;
 
 
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
index 289520fc68..c9767552fe 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/ChannelDecoder.java
@@ -49,7 +49,7 @@ import org.apache.sis.storage.netcdf.base.Variable;
 import org.apache.sis.storage.netcdf.base.Dimension;
 import org.apache.sis.storage.netcdf.base.Convention;
 import org.apache.sis.storage.netcdf.base.NamedElement;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.internal.util.Constants;
 import org.apache.sis.internal.util.CollectionsExt;
 import org.apache.sis.internal.util.StandardDateFormat;
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/VariableInfo.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/VariableInfo.java
index 1fdb7c9e71..072ab8f519 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/VariableInfo.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/main/org/apache/sis/storage/netcdf/classic/VariableInfo.java
@@ -41,9 +41,9 @@ import org.apache.sis.storage.netcdf.base.Variable;
 import org.apache.sis.storage.netcdf.internal.Resources;
 import org.apache.sis.storage.netcdf.base.GridAdjustment;
 import org.apache.sis.internal.storage.StoreUtilities;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.HyperRectangleReader;
-import org.apache.sis.internal.storage.io.Region;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.HyperRectangleReader;
+import org.apache.sis.io.stream.Region;
 import org.apache.sis.internal.util.StandardDateFormat;
 import org.apache.sis.internal.util.UnmodifiableArrayList;
 import org.apache.sis.storage.DataStoreException;
diff --git 
a/endorsed/src/org.apache.sis.storage.netcdf/test/org/apache/sis/storage/netcdf/classic/ChannelDecoderTest.java
 
b/endorsed/src/org.apache.sis.storage.netcdf/test/org/apache/sis/storage/netcdf/classic/ChannelDecoderTest.java
index bce7b56ba6..410e35b889 100644
--- 
a/endorsed/src/org.apache.sis.storage.netcdf/test/org/apache/sis/storage/netcdf/classic/ChannelDecoderTest.java
+++ 
b/endorsed/src/org.apache.sis.storage.netcdf/test/org/apache/sis/storage/netcdf/classic/ChannelDecoderTest.java
@@ -22,7 +22,7 @@ import java.nio.ByteBuffer;
 import java.nio.channels.Channels;
 import org.apache.sis.storage.netcdf.base.Decoder;
 import org.apache.sis.storage.netcdf.base.DecoderTest;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.setup.GeometryLibrary;
 import org.apache.sis.test.DependsOn;
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/SchemaModifier.java
 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/SchemaModifier.java
index 1b382a8dc2..be598efcb2 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/SchemaModifier.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/SchemaModifier.java
@@ -18,7 +18,7 @@ package org.apache.sis.storage.sql.feature;
 
 import org.apache.sis.feature.builder.FeatureTypeBuilder;
 import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.internal.storage.io.InternalOptionKey;
+import org.apache.sis.io.stream.InternalOptionKey;
 import org.apache.sis.setup.OptionKey;
 
 // Branch-dependent imports
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterReader.java
 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterReader.java
index b7b1f1eaf8..a22ff85d3c 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterReader.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterReader.java
@@ -46,8 +46,8 @@ import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.internal.coverage.j2d.ColorModelFactory;
 import org.apache.sis.internal.coverage.j2d.ObservableImage;
 import org.apache.sis.internal.referencing.j2d.AffineTransform2D;
-import org.apache.sis.internal.storage.io.InputStreamArrayGetter;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.InputStreamArrayGetter;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.sql.feature.InfoStatements;
 import org.apache.sis.internal.util.Constants;
 import org.apache.sis.internal.util.Numerics;
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterWriter.java
 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterWriter.java
index 4769d87c1b..b164684ba5 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterWriter.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/postgis/RasterWriter.java
@@ -42,7 +42,7 @@ import org.apache.sis.coverage.grid.GridCoverage;
 import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.storage.sql.feature.Resources;
 import org.apache.sis.storage.sql.feature.InfoStatements;
-import org.apache.sis.internal.storage.io.ChannelDataOutput;
+import org.apache.sis.io.stream.ChannelDataOutput;
 import org.apache.sis.referencing.IdentifiedObjects;
 import org.apache.sis.referencing.operation.matrix.AffineTransforms2D;
 import org.apache.sis.util.resources.Errors;
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/PostgresTest.java
 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/PostgresTest.java
index 1546f69b2b..cb501c6c7c 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/PostgresTest.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/PostgresTest.java
@@ -40,7 +40,7 @@ import org.apache.sis.storage.sql.ResourceDefinition;
 import org.apache.sis.storage.StorageConnector;
 import org.apache.sis.storage.sql.SQLStoreTest;
 import org.apache.sis.coverage.grid.GridCoverage;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.sql.feature.BinaryEncoding;
 import org.apache.sis.storage.sql.feature.GeometryGetterTest;
 import org.apache.sis.internal.feature.jts.JTS;
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterReaderTest.java
 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterReaderTest.java
index fee6fd0270..3f26a6b148 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterReaderTest.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterReaderTest.java
@@ -20,7 +20,7 @@ import java.util.Arrays;
 import java.awt.image.RenderedImage;
 import java.awt.image.DataBufferUShort;
 import org.apache.sis.coverage.grid.GridCoverage;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
 
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterWriterTest.java
 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterWriterTest.java
index 636e626af0..a8e1be664b 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterWriterTest.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/RasterWriterTest.java
@@ -19,7 +19,7 @@ package org.apache.sis.storage.sql.postgis;
 import java.awt.image.Raster;
 import java.io.IOException;
 import java.io.ByteArrayOutputStream;
-import org.apache.sis.internal.storage.io.ChannelDataOutput;
+import org.apache.sis.io.stream.ChannelDataOutput;
 import org.apache.sis.test.TestCase;
 import org.junit.Test;
 
diff --git 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/TestRaster.java
 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/TestRaster.java
index c486a98b49..8bd857efad 100644
--- 
a/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/TestRaster.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/test/org/apache/sis/storage/sql/postgis/TestRaster.java
@@ -28,8 +28,8 @@ import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
 import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.internal.referencing.j2d.AffineTransform2D;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.ChannelDataOutput;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataOutput;
 import org.apache.sis.referencing.CommonCRS;
 
 import static org.junit.Assert.*;
diff --git 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/OutputType.java
 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/OutputType.java
index 677c969d12..1c0a55a720 100644
--- 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/OutputType.java
+++ 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/OutputType.java
@@ -157,7 +157,7 @@ enum OutputType {
      * Returns a reader for the data written by the given writer, or {@code 
null} if we cannot read the data.
      * If non-null, the value returned by this method is a snapshot of the 
given stream content, i.e. changes
      * in the output stream will not affect the returned input stream or 
reader. In particular, contrarily to
-     * {@link 
org.apache.sis.internal.storage.io.IOUtilities#toInputStream(AutoCloseable)} 
this method does not
+     * {@link 
org.apache.sis.io.stream.IOUtilities#toInputStream(AutoCloseable)} this method 
does not
      * invalidate the output stream.
      *
      * <p>The returned input can be used by {@link #inputType}.</p>
diff --git 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxDataStore.java
 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxDataStore.java
index 42dd997880..18ee46922a 100644
--- 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxDataStore.java
+++ 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxDataStore.java
@@ -41,9 +41,9 @@ import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.StorageConnector;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.internal.storage.URIDataStore;
-import org.apache.sis.internal.storage.io.ChannelFactory;
-import org.apache.sis.internal.storage.io.IOUtilities;
-import org.apache.sis.internal.storage.io.Markable;
+import org.apache.sis.io.stream.ChannelFactory;
+import org.apache.sis.io.stream.IOUtilities;
+import org.apache.sis.io.stream.Markable;
 import org.apache.sis.internal.util.AbstractMap;
 import org.apache.sis.internal.util.Constants;
 import org.apache.sis.internal.util.Strings;
diff --git 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamReader.java
 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamReader.java
index ae13411bf4..f38c715248 100644
--- 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamReader.java
+++ 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamReader.java
@@ -41,7 +41,7 @@ import jakarta.xml.bind.JAXBException;
 import org.apache.sis.internal.jaxb.Context;
 import org.apache.sis.internal.util.Strings;
 import org.apache.sis.internal.util.StandardDateFormat;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.util.collection.BackingStoreException;
diff --git 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamWriter.java
 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamWriter.java
index d2e812478b..3a4e5ad73a 100644
--- 
a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamWriter.java
+++ 
b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/StaxStreamWriter.java
@@ -30,7 +30,7 @@ import jakarta.xml.bind.JAXBException;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.util.collection.BackingStoreException;
 import org.apache.sis.util.resources.Errors;
 
diff --git a/endorsed/src/org.apache.sis.storage/main/module-info.java 
b/endorsed/src/org.apache.sis.storage/main/module-info.java
index 60c369e0e1..fbb041b8e4 100644
--- a/endorsed/src/org.apache.sis.storage/main/module-info.java
+++ b/endorsed/src/org.apache.sis.storage/main/module-info.java
@@ -57,7 +57,7 @@ module org.apache.sis.storage {
             org.apache.sis.openoffice,
             org.apache.sis.gui;                         // In the "optional" 
sub-project.
 
-    exports org.apache.sis.internal.storage.io to
+    exports org.apache.sis.io.stream to
             org.apache.sis.storage.xml,
             org.apache.sis.storage.sql,
             org.apache.sis.storage.netcdf,
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/PRJDataStore.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/PRJDataStore.java
index 64c2cb1867..408ed600eb 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/PRJDataStore.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/PRJDataStore.java
@@ -46,7 +46,7 @@ import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
 import org.apache.sis.storage.StorageConnector;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.storage.wkt.StoreFormat;
 import org.apache.sis.io.wkt.Convention;
 import org.apache.sis.parameter.ParameterBuilder;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/URIDataStore.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/URIDataStore.java
index 768372c3af..77e3e52567 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/URIDataStore.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/URIDataStore.java
@@ -37,7 +37,7 @@ import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStoreProvider;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.IllegalOpenParameterException;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.setup.OptionKey;
 import org.apache.sis.util.ArraysExt;
 import org.apache.sis.util.iso.Names;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/WritableResourceSupport.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/WritableResourceSupport.java
index bf8dfedfbf..26b1320cb9 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/WritableResourceSupport.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/WritableResourceSupport.java
@@ -33,8 +33,8 @@ import org.apache.sis.storage.ReadOnlyStorageException;
 import org.apache.sis.storage.ResourceAlreadyExistsException;
 import org.apache.sis.storage.IncompatibleResourceException;
 import org.apache.sis.storage.WritableGridCoverageResource;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.ChannelDataOutput;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataOutput;
 import org.apache.sis.coverage.CoverageCombiner;
 import org.apache.sis.referencing.operation.matrix.AffineTransforms2D;
 import org.apache.sis.referencing.operation.transform.TransformSeparator;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ByteRangeChannel.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ByteRangeChannel.java
similarity index 97%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ByteRangeChannel.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ByteRangeChannel.java
index c8e19cd0c7..45866e4702 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ByteRangeChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ByteRangeChannel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.nio.channels.SeekableByteChannel;
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ByteWriter.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ByteWriter.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ByteWriter.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ByteWriter.java
index 897a71ca25..de823a4208 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ByteWriter.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ByteWriter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.nio.Buffer;
 import java.nio.ByteBuffer;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelData.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelData.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelData.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelData.java
index fc3d712917..9822dda3f0 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelData.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelData.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelDataInput.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelDataInput.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelDataInput.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelDataInput.java
index e6d89bcde7..a956112da6 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelDataInput.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelDataInput.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.io.EOFException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelDataOutput.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelDataOutput.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelDataOutput.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelDataOutput.java
index 1e563dfa69..785e4ee6bb 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelDataOutput.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelDataOutput.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Arrays;
 import java.io.Flushable;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelFactory.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelFactory.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelFactory.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelFactory.java
index 87a533cd72..b96765ca6c 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelFactory.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Set;
 import java.util.EnumSet;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelImageInputStream.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelImageInputStream.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelImageInputStream.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelImageInputStream.java
index fdef2c80b5..02dab1c7b3 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelImageInputStream.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelImageInputStream.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.DataInputStream;
 import java.io.IOException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelImageOutputStream.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelImageOutputStream.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelImageOutputStream.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelImageOutputStream.java
index 04d7d2b528..6769f05c4b 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/ChannelImageOutputStream.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/ChannelImageOutputStream.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.Closeable;
 import java.io.DataOutput;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/DataTransfer.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/DataTransfer.java
similarity index 98%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/DataTransfer.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/DataTransfer.java
index a336ba81b7..93b2a8ba46 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/DataTransfer.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/DataTransfer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.nio.Buffer;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/FileCacheByteChannel.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/FileCacheByteChannel.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/FileCacheByteChannel.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/FileCacheByteChannel.java
index c1d86edff0..02455bcead 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/FileCacheByteChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/FileCacheByteChannel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Collection;
 import java.util.function.UnaryOperator;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/HttpByteChannel.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/HttpByteChannel.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/HttpByteChannel.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/HttpByteChannel.java
index 47d2ef6664..03d9c21755 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/HttpByteChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/HttpByteChannel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.net.URI;
 import java.net.http.HttpClient;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/HyperRectangleReader.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/HyperRectangleReader.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/HyperRectangleReader.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/HyperRectangleReader.java
index a4c74ac8d0..d4fcb8489e 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/HyperRectangleReader.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/HyperRectangleReader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.nio.Buffer;
 import java.nio.ByteBuffer;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/IOUtilities.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/IOUtilities.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/IOUtilities.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/IOUtilities.java
index 16c0318124..5698fa6694 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/IOUtilities.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/IOUtilities.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Locale;
 import java.io.File;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InputStreamAdapter.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InputStreamAdapter.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InputStreamAdapter.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InputStreamAdapter.java
index 225d73b2e5..540251a2b3 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InputStreamAdapter.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InputStreamAdapter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.InputStream;
 import java.io.IOException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InputStreamArrayGetter.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InputStreamArrayGetter.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InputStreamArrayGetter.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InputStreamArrayGetter.java
index 7432a391a7..83265483db 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InputStreamArrayGetter.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InputStreamArrayGetter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InternalOptionKey.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InternalOptionKey.java
similarity index 97%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InternalOptionKey.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InternalOptionKey.java
index c5baa840eb..9701231888 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/InternalOptionKey.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/InternalOptionKey.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.function.UnaryOperator;
 import org.apache.sis.setup.OptionKey;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/Markable.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/Markable.java
similarity index 98%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/Markable.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/Markable.java
index c1170e8aaa..ba7bed7233 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/Markable.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/Markable.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/MemoryDataTransfer.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/MemoryDataTransfer.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/MemoryDataTransfer.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/MemoryDataTransfer.java
index f266da4db1..fbd78700d6 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/MemoryDataTransfer.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/MemoryDataTransfer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.EOFException;
 import java.io.IOException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/NullChannel.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/NullChannel.java
similarity index 98%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/NullChannel.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/NullChannel.java
index e1e629c610..8593d95505 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/NullChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/NullChannel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Objects;
 import java.nio.ByteBuffer;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/OutputStreamAdapter.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/OutputStreamAdapter.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/OutputStreamAdapter.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/OutputStreamAdapter.java
index 1bfc0bccce..40a8dd9912 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/OutputStreamAdapter.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/OutputStreamAdapter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.OutputStream;
 import java.io.IOException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/Region.java
 b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/Region.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/Region.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/Region.java
index 05785987b8..40c1e645cf 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/Region.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/Region.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import org.apache.sis.io.TableAppender;
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/RewindableLineReader.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/RewindableLineReader.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/RewindableLineReader.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/RewindableLineReader.java
index d916c07cf1..f50916bbf1 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/RewindableLineReader.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/RewindableLineReader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/package-info.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/package-info.java
similarity index 96%
rename from 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/package-info.java
rename to 
endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/package-info.java
index 4165654aa7..2436d35eb4 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/internal/storage/io/package-info.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/io/stream/package-info.java
@@ -27,4 +27,4 @@
  * @version 1.4
  * @since   0.3
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java
index 06d0cc5867..fd19628fd4 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/AbstractGridCoverageResource.java
@@ -36,7 +36,7 @@ import org.apache.sis.measure.Latitude;
 import org.apache.sis.measure.Longitude;
 import org.apache.sis.measure.AngleFormat;
 import org.apache.sis.util.logging.PerformanceLevel;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.internal.util.StandardDateFormat;
 import org.apache.sis.internal.storage.MetadataBuilder;
 import org.apache.sis.internal.storage.Resources;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreClosedException.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreClosedException.java
index 6d8fa609e0..49ce1414c0 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreClosedException.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreClosedException.java
@@ -18,7 +18,7 @@ package org.apache.sis.storage;
 
 import java.util.Locale;
 import java.nio.file.OpenOption;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.internal.storage.Resources;
 
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreException.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreException.java
index 9da68d073e..8c29c91ac3 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreException.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreException.java
@@ -20,7 +20,7 @@ import java.util.Locale;
 import org.opengis.util.InternationalString;
 import org.apache.sis.util.LocalizedException;
 import org.apache.sis.internal.storage.Resources;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.util.Workaround;
 
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreProvider.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreProvider.java
index 8069ddbbfd..034b5d5a04 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreProvider.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/DataStoreProvider.java
@@ -26,8 +26,8 @@ import org.opengis.parameter.ParameterDescriptorGroup;
 import org.opengis.metadata.distribution.Format;
 import org.apache.sis.internal.simple.SimpleFormat;
 import org.apache.sis.internal.storage.URIDataStore;
-import org.apache.sis.internal.storage.io.Markable;
-import org.apache.sis.internal.storage.io.RewindableLineReader;
+import org.apache.sis.io.stream.Markable;
+import org.apache.sis.io.stream.RewindableLineReader;
 import org.apache.sis.metadata.iso.citation.DefaultCitation;
 import org.apache.sis.metadata.iso.distribution.DefaultFormat;
 import org.apache.sis.measure.Range;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ForwardOnlyStorageException.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ForwardOnlyStorageException.java
index 46caa5be12..7ce0f65303 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ForwardOnlyStorageException.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ForwardOnlyStorageException.java
@@ -19,7 +19,7 @@ package org.apache.sis.storage;
 import java.util.Locale;
 import java.nio.file.OpenOption;
 import org.apache.sis.internal.storage.Resources;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 
 
 /**
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ProbeReader.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ProbeReader.java
index 5ecc30d27f..2646c03977 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ProbeReader.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/ProbeReader.java
@@ -29,7 +29,7 @@ import org.apache.sis.internal.storage.Resources;
  * The {@link #close()} method closes this reader but not the wrapped reader, 
which is only reset.
  *
  * <p>Note: this wrapper is not used if the reader is an instance of
- * {@link org.apache.sis.internal.storage.io.RewindableLineReader}.</p>
+ * {@link org.apache.sis.io.stream.RewindableLineReader}.</p>
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.2
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/StorageConnector.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/StorageConnector.java
index b3a3f0c7af..a5d737f1a2 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/StorageConnector.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/StorageConnector.java
@@ -61,15 +61,15 @@ import org.apache.sis.util.collection.DefaultTreeTable;
 import org.apache.sis.util.UnconvertibleObjectException;
 import org.apache.sis.internal.storage.Resources;
 import org.apache.sis.internal.storage.StoreUtilities;
-import org.apache.sis.internal.storage.io.IOUtilities;
-import org.apache.sis.internal.storage.io.ChannelFactory;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.ChannelDataOutput;
-import org.apache.sis.internal.storage.io.ChannelImageInputStream;
-import org.apache.sis.internal.storage.io.ChannelImageOutputStream;
-import org.apache.sis.internal.storage.io.InputStreamAdapter;
-import org.apache.sis.internal.storage.io.RewindableLineReader;
-import org.apache.sis.internal.storage.io.InternalOptionKey;
+import org.apache.sis.io.stream.IOUtilities;
+import org.apache.sis.io.stream.ChannelFactory;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataOutput;
+import org.apache.sis.io.stream.ChannelImageInputStream;
+import org.apache.sis.io.stream.ChannelImageOutputStream;
+import org.apache.sis.io.stream.InputStreamAdapter;
+import org.apache.sis.io.stream.RewindableLineReader;
+import org.apache.sis.io.stream.InternalOptionKey;
 import org.apache.sis.internal.system.Configuration;
 import org.apache.sis.internal.util.Strings;
 import org.apache.sis.io.InvalidSeekException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/UnsupportedStorageException.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/UnsupportedStorageException.java
index 8bd37e567f..1b3c30ba6b 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/UnsupportedStorageException.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/UnsupportedStorageException.java
@@ -24,7 +24,7 @@ import java.nio.file.OpenOption;
 import org.apache.sis.util.Classes;
 import org.apache.sis.util.Workaround;
 import org.apache.sis.internal.storage.Resources;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 
 
 /**
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java
index 1f436821e4..2fcdafb0ec 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/csv/Store.java
@@ -54,8 +54,8 @@ import org.apache.sis.internal.util.UnmodifiableArrayList;
 import org.apache.sis.internal.util.Numerics;
 import org.apache.sis.internal.util.StandardDateFormat;
 import org.apache.sis.internal.storage.MetadataBuilder;
-import org.apache.sis.internal.storage.io.IOUtilities;
-import org.apache.sis.internal.storage.io.RewindableLineReader;
+import org.apache.sis.io.stream.IOUtilities;
+import org.apache.sis.io.stream.RewindableLineReader;
 import org.apache.sis.internal.storage.Resources;
 import org.apache.sis.internal.storage.URIDataStore;
 import org.apache.sis.internal.feature.Geometries;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java
index ce85456623..4c4d65ab48 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/AsciiGridStore.java
@@ -38,7 +38,7 @@ import org.apache.sis.storage.DataStoreClosedException;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.internal.coverage.RangeArgument;
 import org.apache.sis.internal.storage.Resources;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.measure.NumberRange;
 import org.apache.sis.referencing.operation.matrix.Matrix3;
 import org.apache.sis.referencing.operation.transform.MathTransforms;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/CharactersView.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/CharactersView.java
index 0cfec56af7..95ee5308a1 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/CharactersView.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/CharactersView.java
@@ -25,7 +25,7 @@ import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import org.apache.sis.internal.jdk17.JDK17;
 import org.apache.sis.internal.storage.Resources;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.util.resources.Errors;
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterReader.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterReader.java
index a009e542c0..ffc322f7b5 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterReader.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterReader.java
@@ -31,9 +31,9 @@ import org.apache.sis.coverage.grid.GridDerivation;
 import org.apache.sis.internal.coverage.RangeArgument;
 import org.apache.sis.internal.coverage.j2d.RasterFactory;
 import org.apache.sis.internal.coverage.j2d.ImageUtilities;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.HyperRectangleReader;
-import org.apache.sis.internal.storage.io.Region;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.HyperRectangleReader;
+import org.apache.sis.io.stream.Region;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.util.ArraysExt;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterStore.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterStore.java
index f98275b0a2..c3bd1d92b6 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterStore.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/RawRasterStore.java
@@ -37,7 +37,7 @@ import org.apache.sis.coverage.grid.GridCoverage;
 import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.internal.coverage.RangeArgument;
 import org.apache.sis.internal.storage.Resources;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelDataInput;
 import org.apache.sis.internal.referencing.j2d.AffineTransform2D;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreClosedException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/WritableStore.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/WritableStore.java
index 8db760b127..27d7da9a29 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/WritableStore.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/esri/WritableStore.java
@@ -33,7 +33,7 @@ import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreReferencingException;
 import org.apache.sis.storage.WritableGridCoverageResource;
 import org.apache.sis.internal.storage.WritableResourceSupport;
-import org.apache.sis.internal.storage.io.ChannelDataOutput;
+import org.apache.sis.io.stream.ChannelDataOutput;
 import org.apache.sis.referencing.operation.matrix.Matrices;
 import org.apache.sis.referencing.operation.transform.MathTransforms;
 import org.apache.sis.storage.IncompatibleResourceException;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/FormatFinder.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/FormatFinder.java
index 4cb5495e7b..22545e154f 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/FormatFinder.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/FormatFinder.java
@@ -34,7 +34,7 @@ import javax.imageio.stream.ImageOutputStream;
 import javax.imageio.stream.FileImageOutputStream;
 import org.apache.sis.storage.StorageConnector;
 import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.util.Workaround;
 
 
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileResource.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileResource.java
index 711257c2ae..1088659397 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileResource.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileResource.java
@@ -42,7 +42,7 @@ import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.event.StoreListeners;
 import org.apache.sis.internal.storage.Resources;
 import org.apache.sis.internal.storage.StoreResource;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.internal.coverage.RangeArgument;
 import org.apache.sis.internal.coverage.j2d.ImageUtilities;
 import org.apache.sis.internal.util.UnmodifiableArrayList;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStoreProvider.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStoreProvider.java
index fd0be24e56..e16c3a1fb2 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStoreProvider.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/image/WorldFileStoreProvider.java
@@ -26,7 +26,7 @@ import org.apache.sis.storage.StorageConnector;
 import org.apache.sis.internal.storage.Capability;
 import org.apache.sis.internal.storage.StoreMetadata;
 import org.apache.sis.internal.storage.PRJDataStore;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.storage.GridCoverageResource;
 import org.apache.sis.storage.Aggregate;
 import org.apache.sis.storage.ProbeResult;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/FirstKeywordPeek.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/FirstKeywordPeek.java
index bdf9af8c96..4857ebacb1 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/FirstKeywordPeek.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/wkt/FirstKeywordPeek.java
@@ -22,7 +22,7 @@ import java.nio.ByteBuffer;
 import java.nio.file.Path;
 import java.nio.file.Files;
 import java.nio.channels.SeekableByteChannel;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.storage.CanNotProbeException;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.DataStoreProvider;
diff --git 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/AbstractProvider.java
 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/AbstractProvider.java
index 73977acd38..a4ff965d74 100644
--- 
a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/AbstractProvider.java
+++ 
b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/xml/AbstractProvider.java
@@ -24,7 +24,7 @@ import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.StorageConnector;
 import org.apache.sis.storage.ProbeResult;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.internal.storage.DocumentedStoreProvider;
 
 
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ByteArrayChannel.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ByteArrayChannel.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ByteArrayChannel.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ByteArrayChannel.java
index 9504e34d1f..778ee0ff46 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ByteArrayChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ByteArrayChannel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataInputTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataInputTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataInputTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataInputTest.java
index 7068f6c14c..c3c8023293 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataInputTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataInputTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.DataInput;
 import java.io.DataInputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataOutputTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataOutputTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataOutputTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataOutputTest.java
index 282bc491c9..fb201a220c 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataOutputTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataOutputTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Arrays;
 import java.io.ByteArrayOutputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataTestCase.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataTestCase.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataTestCase.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataTestCase.java
index ba5166f62a..e673a076db 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelDataTestCase.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelDataTestCase.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 
 import java.util.Random;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelImageInputStreamTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelImageInputStreamTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelImageInputStreamTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelImageInputStreamTest.java
index 1b9def6f3b..b9c0e6162e 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelImageInputStreamTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelImageInputStreamTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Arrays;
 import java.nio.ByteOrder;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelImageOutputStreamTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelImageOutputStreamTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelImageOutputStreamTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelImageOutputStreamTest.java
index a3990b3154..d66835b756 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ChannelImageOutputStreamTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ChannelImageOutputStreamTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.io.ByteArrayOutputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ComputedInputStream.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ComputedInputStream.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ComputedInputStream.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ComputedInputStream.java
index 566ff663b5..99a7c74394 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ComputedInputStream.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ComputedInputStream.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Random;
 import java.io.InputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/DripByteChannel.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/DripByteChannel.java
similarity index 98%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/DripByteChannel.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/DripByteChannel.java
index 13dc825b3a..687344a7c3 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/DripByteChannel.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/DripByteChannel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Random;
 import java.io.IOException;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/FileCacheByteChannelTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/FileCacheByteChannelTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/FileCacheByteChannelTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/FileCacheByteChannelTest.java
index a6ec0447e2..81c3644805 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/FileCacheByteChannelTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/FileCacheByteChannelTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.List;
 import java.util.Random;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/HyperRectangleReaderTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/HyperRectangleReaderTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/HyperRectangleReaderTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/HyperRectangleReaderTest.java
index 3f4a3d923d..3dbd23a056 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/HyperRectangleReaderTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/HyperRectangleReaderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Arrays;
 import java.util.Random;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/IOUtilitiesTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/IOUtilitiesTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/IOUtilitiesTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/IOUtilitiesTest.java
index 2f2e350b95..4856662e0c 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/IOUtilitiesTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/IOUtilitiesTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.net.URL;
 import java.io.File;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ImageInputStreamComparator.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ImageInputStreamComparator.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ImageInputStreamComparator.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ImageInputStreamComparator.java
index 74601cf355..ac865fd742 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/ImageInputStreamComparator.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/ImageInputStreamComparator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.util.Arrays;
 import java.io.IOException;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/InputStreamArrayGetterTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/InputStreamArrayGetterTest.java
similarity index 98%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/InputStreamArrayGetterTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/InputStreamArrayGetterTest.java
index beaaa642ab..fe9dcbe20a 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/InputStreamArrayGetterTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/InputStreamArrayGetterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.io.ByteArrayInputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/MemoryCacheImageOutputStream.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/MemoryCacheImageOutputStream.java
similarity index 98%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/MemoryCacheImageOutputStream.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/MemoryCacheImageOutputStream.java
index 97b3ca1127..5a862c6838 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/MemoryCacheImageOutputStream.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/MemoryCacheImageOutputStream.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.io.OutputStream;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/RewindableLineReaderTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/RewindableLineReaderTest.java
similarity index 99%
rename from 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/RewindableLineReaderTest.java
rename to 
endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/RewindableLineReaderTest.java
index 38ff29b4f7..92d7957967 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/internal/storage/io/RewindableLineReaderTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/io/stream/RewindableLineReaderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.storage.io;
+package org.apache.sis.io.stream;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
diff --git 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/StorageConnectorTest.java
 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/StorageConnectorTest.java
index 19bdae2512..28a423a72e 100644
--- 
a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/StorageConnectorTest.java
+++ 
b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/StorageConnectorTest.java
@@ -31,9 +31,9 @@ import javax.imageio.ImageIO;
 import java.sql.Connection;
 import org.apache.sis.setup.OptionKey;
 import org.apache.sis.util.UnconvertibleObjectException;
-import org.apache.sis.internal.storage.io.ChannelDataInput;
-import org.apache.sis.internal.storage.io.ChannelImageInputStream;
-import org.apache.sis.internal.storage.io.InputStreamAdapter;
+import org.apache.sis.io.stream.ChannelDataInput;
+import org.apache.sis.io.stream.ChannelImageInputStream;
+import org.apache.sis.io.stream.InputStreamAdapter;
 import org.apache.sis.test.DependsOnMethod;
 import org.apache.sis.test.DependsOn;
 import org.apache.sis.test.TestCase;
@@ -52,7 +52,7 @@ import static org.opengis.test.Assert.assertInstanceOf;
  * @version 1.4
  * @since   0.3
  */
-@DependsOn(org.apache.sis.internal.storage.io.ChannelImageInputStreamTest.class)
+@DependsOn(org.apache.sis.io.stream.ChannelImageInputStreamTest.class)
 public final class StorageConnectorTest extends TestCase {
     /**
      * Name of the test file, in the same directory than this {@code 
StorageConnectorTest} file.
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/SystemMonitor.java 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/SystemMonitor.java
index 8f66996b08..cd564be24a 100644
--- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/SystemMonitor.java
+++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/SystemMonitor.java
@@ -29,7 +29,7 @@ import org.apache.sis.gui.dataset.LogViewer;
 import org.apache.sis.gui.internal.Resources;
 import org.apache.sis.gui.internal.DataStoreOpener;
 import org.apache.sis.gui.internal.io.FileAccessView;
-import org.apache.sis.internal.storage.io.ChannelFactory;
+import org.apache.sis.io.stream.ChannelFactory;
 import org.apache.sis.util.resources.Vocabulary;
 
 
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/PathAction.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/PathAction.java
index 54ca6bdbd6..f00bde4bdc 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/PathAction.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/PathAction.java
@@ -32,7 +32,7 @@ import javafx.scene.input.ClipboardContent;
 import org.apache.sis.gui.internal.ExceptionReporter;
 import org.apache.sis.internal.storage.ResourceOnFileSystem;
 import org.apache.sis.internal.storage.URIDataStore;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.Resource;
 
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceCell.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceCell.java
index 66a81bef64..47388df931 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceCell.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceCell.java
@@ -28,7 +28,7 @@ import javafx.scene.paint.Color;
 import org.apache.sis.storage.Resource;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.internal.storage.URIDataStore;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.gui.internal.ExceptionReporter;
 import org.apache.sis.gui.internal.DataStoreOpener;
 import org.apache.sis.gui.internal.Resources;
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceTree.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceTree.java
index 1aecab6394..7f13a3a13f 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceTree.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/dataset/ResourceTree.java
@@ -40,7 +40,7 @@ import javafx.scene.input.TransferMode;
 import org.apache.sis.storage.Resource;
 import org.apache.sis.storage.Aggregate;
 import org.apache.sis.storage.DataStore;
-import org.apache.sis.internal.storage.io.IOUtilities;
+import org.apache.sis.io.stream.IOUtilities;
 import org.apache.sis.gui.internal.DataStoreOpener;
 import org.apache.sis.gui.internal.BackgroundThreads;
 import org.apache.sis.gui.internal.ExceptionReporter;
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/DataStoreOpener.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/DataStoreOpener.java
index 0ed81af9fa..2f982e64c4 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/DataStoreOpener.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/DataStoreOpener.java
@@ -45,9 +45,9 @@ import org.apache.sis.storage.DataStores;
 import org.apache.sis.util.collection.Cache;
 import org.apache.sis.util.resources.Vocabulary;
 import org.apache.sis.internal.util.Strings;
-import org.apache.sis.internal.storage.io.IOUtilities;
-import org.apache.sis.internal.storage.io.ChannelFactory;
-import org.apache.sis.internal.storage.io.InternalOptionKey;
+import org.apache.sis.io.stream.IOUtilities;
+import org.apache.sis.io.stream.ChannelFactory;
+import org.apache.sis.io.stream.InternalOptionKey;
 import org.apache.sis.storage.folder.ConcurrentCloser;
 import org.apache.sis.storage.DataStore;
 import org.apache.sis.gui.DataViewer;
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessItem.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessItem.java
index de0d6206ca..03bd632ff3 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessItem.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessItem.java
@@ -40,7 +40,7 @@ import javafx.util.Duration;
 import org.apache.sis.measure.Range;
 import org.apache.sis.internal.util.Numerics;
 import org.apache.sis.util.collection.RangeSet;
-import org.apache.sis.internal.storage.io.ByteRangeChannel;
+import org.apache.sis.io.stream.ByteRangeChannel;
 
 
 /**
diff --git 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessView.java
 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessView.java
index 30b5dee00d..431ff7718b 100644
--- 
a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessView.java
+++ 
b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/internal/io/FileAccessView.java
@@ -32,8 +32,8 @@ import org.apache.sis.util.resources.Vocabulary;
 import org.apache.sis.gui.internal.FixedHeaderColumnSize;
 import org.apache.sis.gui.internal.ImmutableObjectProperty;
 import org.apache.sis.gui.internal.Resources;
-import org.apache.sis.internal.storage.io.ChannelFactory;
-import org.apache.sis.internal.storage.io.FileCacheByteChannel;
+import org.apache.sis.io.stream.ChannelFactory;
+import org.apache.sis.io.stream.FileCacheByteChannel;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.event.StoreListeners;
 

Reply via email to