diff --git a/cdm/src/main/java/ucar/nc2/stream/NcStreamDataCol.java b/cdm/src/main/java/ucar/nc2/stream/NcStreamDataCol.java
index <HASH>..<HASH> 100644
--- a/cdm/src/main/java/ucar/nc2/stream/NcStreamDataCol.java
+++ b/cdm/src/main/java/ucar/nc2/stream/NcStreamDataCol.java
@@ -124,7 +124,9 @@ public class NcStreamDataCol {
         IndexIterator iter = data.getIndexIterator();
         while (iter.hasNext()) {
           ByteBuffer bb = (ByteBuffer) iter.next();
-          builder.addOpaquedata(ByteString.copyFrom(bb));
+
+          // Need to use duplicate so that internal state of bb isn't affected
+          builder.addOpaquedata(ByteString.copyFrom(bb.duplicate()));
         }
       } else {
         throw new IllegalStateException("Unknown class for OPAQUE =" + data.getClass().getName());
NCSTREAM: Fix getting opaque data multiple times.

Combination of caching data in ByteBuffers and copying from them was
creating problems (since bytebuffers track an internal position marker).
Use a duplicate (shallow copy) of the ByteBuffer.