]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graph/src/org/simantics/graph/representation/InputChannel.java
Remove duplicate InputChannel inner classes
[simantics/platform.git] / bundles / org.simantics.graph / src / org / simantics / graph / representation / InputChannel.java
diff --git a/bundles/org.simantics.graph/src/org/simantics/graph/representation/InputChannel.java b/bundles/org.simantics.graph/src/org/simantics/graph/representation/InputChannel.java
new file mode 100644 (file)
index 0000000..1eb00c2
--- /dev/null
@@ -0,0 +1,42 @@
+package org.simantics.graph.representation;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.ReadableByteChannel;
+
+public class InputChannel implements ReadableByteChannel {
+
+       private final InputStream stream;
+
+       public InputChannel(InputStream stream) {
+               this.stream = stream;
+       }
+
+       @Override
+       public boolean isOpen() {
+               return true;
+       }
+
+       @Override
+       public void close() throws IOException {
+               // NOTE: it is an intentional choice not to close the underlying stream here
+               // InputStreams given directly to TransferableGraphFileReader are expected to
+               // be closed outside of this implementation.
+       }
+
+       @Override
+       public int read(ByteBuffer dst) throws IOException {
+               int nRead;
+               int size = 0;
+               int position = dst.position();
+               int limit = dst.limit();
+               // The users of this channel expect that the data is fully read at this point
+               while ((nRead = stream.read(dst.array(), position, limit - position)) != -1 && limit - position > 0) {
+                       size += nRead;
+                       position += nRead;
+               }
+               return size;
+       }
+
+}
\ No newline at end of file