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

leerho pushed a commit to branch IntegrateJava17_v2
in repository https://gitbox.apache.org/repos/asf/datasketches-memory.git


The following commit(s) were added to refs/heads/IntegrateJava17_v2 by this 
push:
     new d1c2edf  Interim changes to get BaseState and BaseStateImpl to match 
between Java 8 and 17
d1c2edf is described below

commit d1c2edf89a7533518abe699623568431de3ce47f
Author: Lee Rhodes <[email protected]>
AuthorDate: Sun Dec 18 19:52:39 2022 -0800

    Interim changes to get BaseState and BaseStateImpl to match between Java
    8 and 17
---
 .../org/apache/datasketches/memory/BaseState.java  | 119 ++++++++-------
 .../memory/internal/BaseStateImpl.java             |  61 ++++----
 .../memory/internal/BaseWritableBufferImpl.java    |  14 +-
 .../memory/internal/BaseWritableMemoryImpl.java    |  10 +-
 .../memory/internal/AllocateDirectMemoryTest.java  |   8 +-
 .../datasketches/memory/internal/Buffer2Test.java  |   6 +-
 .../memory/internal/DruidIssue11544Test.java       |   6 +-
 .../datasketches/memory/internal/LeafImplTest.java | 129 +++++++++-------
 .../internal/NativeWritableBufferImplTest.java     |   6 +-
 .../internal/NativeWritableMemoryImplTest.java     |   6 +-
 .../memory/internal/SpecificLeafTest.java          |  93 ++++++------
 .../org/apache/datasketches/memory/BaseState.java  |  90 +++++++----
 .../internal/BBNonNativeWritableBufferImpl.java    |   6 +-
 .../internal/BBNonNativeWritableMemoryImpl.java    |   6 +-
 .../memory/internal/BBWritableBufferImpl.java      |   6 +-
 .../memory/internal/BBWritableMemoryImpl.java      |   6 +-
 .../memory/internal/BaseBufferImpl.java            |   4 +-
 .../memory/internal/BaseStateImpl.java             | 164 ++++++++++-----------
 .../memory/internal/BaseWritableBufferImpl.java    |  28 ++--
 .../memory/internal/BaseWritableMemoryImpl.java    |  48 +++---
 .../memory/internal/CompareAndCopy.java            |  12 +-
 .../DirectNonNativeWritableBufferImpl.java         |   2 +-
 .../DirectNonNativeWritableMemoryImpl.java         |   2 +-
 .../memory/internal/DirectWritableBufferImpl.java  |   2 +-
 .../memory/internal/DirectWritableMemoryImpl.java  |   2 +-
 .../memory/internal/NativeWritableBufferImpl.java  |   8 +-
 .../memory/internal/NativeWritableMemoryImpl.java  |  38 ++---
 .../internal/NonNativeWritableBufferImpl.java      |   8 +-
 .../internal/NonNativeWritableMemoryImpl.java      |  38 ++---
 .../memory/internal/AllocateDirectMemoryTest.java  |   8 +-
 .../datasketches/memory/internal/Buffer2Test.java  |   6 +-
 .../datasketches/memory/internal/BufferTest.java   |   4 +-
 .../memory/internal/DruidIssue11544Test.java       |   6 +-
 .../internal/ExampleMemoryRequestServerTest.java   |  10 +-
 .../datasketches/memory/internal/LeafImplTest.java |  81 ++++++----
 .../datasketches/memory/internal/MemoryTest.java   |   4 +-
 .../internal/NativeWritableBufferImplTest.java     |  10 +-
 .../internal/NativeWritableMemoryImplTest.java     |  10 +-
 .../memory/internal/SpecificLeafTest.java          |  96 ++++++------
 39 files changed, 610 insertions(+), 553 deletions(-)

diff --git 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java
 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java
index c8fe15b..c40c51c 100644
--- 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java
+++ 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/BaseState.java
@@ -74,11 +74,24 @@ public interface BaseState {
    */
   long getCapacity();
 
+  /**
+   * Returns the MemoryRequestSever or null, if it has not been configured.
+   * @return the MemoryRequestSever or null, if it has not been configured.
+   */
+  MemoryRequestServer getMemoryRequestServer();
+
+  /**
+   * Is the underlying resource scope alive?
+   * @return true, if the underlying resource scope is alive.
+   * @see #close()
+   */
+  boolean isAlive();
+
   /**
    * Returns true if this Memory is backed by a ByteBuffer.
    * @return true if this Memory is backed by a ByteBuffer.
    */
-  boolean hasByteBuffer();
+  boolean isByteBufferResource();
 
   /**
    * Returns true if the Native ByteOrder is the same as the ByteOrder of the
@@ -90,19 +103,59 @@ public interface BaseState {
   boolean isByteOrderCompatible(ByteOrder byteOrder);
 
   /**
-   * Returns true if the backing resource is direct (off-heap) memory.
+   * If true, the backing resource is direct (off-heap) memory.
    * This is the case for allocated direct memory, memory mapped files,
    * or from a wrapped ByteBuffer that was allocated direct.
+   * If false, the backing resource is the normal Java heap.
    * @return true if the backing resource is direct (off-heap) memory.
    */
-  boolean isDirect();
+  boolean isDirectResource();
+
+  /**
+   * Returns true if this instance is a duplicate of a Buffer instance.
+   * @return true if this instance is a duplicate of a Buffer instance.
+   */
+  boolean isDuplicateBufferView();
+
+  /**
+   * If true, this is a <i>Memory</i> or <i>WritableMemory</i> instance, which 
provides
+   * the Memory API.
+   * The Memory API is the principal API for this Memory Component.
+   * It provides a rich variety of direct manipulations of four types of 
resources:
+   * On-heap memory, direct (off-heap) memory, memory-mapped files, and 
ByteBuffers.
+   * If false, this is a <i>Buffer</i> or <i>WritableBuffer</i> instance, 
which provides the Buffer API.
+   * The Buffer API is largely parallel to the Memory API except that it adds 
a positional API
+   * similar to that in <i>ByteBuffer</i>.  The positional API is a 
convenience when iterating over structured
+   * arrays, or buffering input or output streams (thus the name).
+   * @return true if this is a Buffer or WritableBuffer instance, which 
provides the Buffer API.
+   */
+  boolean isMemoryApi();
+
+  /**
+   * Returns true if the backing resource is a memory mapped file.
+   * @return true if the backing resource is a memory mapped file.
+   */
+  boolean isMemoryMappedFileResource();
+
+  /**
+   * If true, all put and get operations will assume the non-native ByteOrder.
+   * Otherwise, all put and get operations will assume the native ByteOrder.
+   * @return true, if all put and get operations will assume the non-native 
ByteOrder.
+   */
+  boolean isNonNativeOrder();
 
   /**
-   * Returns true if this object or the backing resource is read-only.
-   * @return true if this object or the backing resource is read-only.
+   * Returns true if this or the backing resource is read-only.
+   * @return true if this or the backing resource is read-only.
    */
   boolean isReadOnly();
 
+  /**
+   * Returns true if this instance is a region view of another Memory or Buffer
+   * @return true if this instance is a region view of another Memory or Buffer
+   */
+  boolean isRegionView();
+
   /**
    * Returns a description of this object with an optional formatted hex 
string of the data
    * for the specified a range. Used primarily for testing.
@@ -167,44 +220,6 @@ public interface BaseState {
    */
   void force();
 
-  /**
-   * Returns the configured MemoryRequestSever or null, if it has not been 
configured.
-   * @return the configured MemoryRequestSever or null, if it has not been 
configured.
-   */
-  MemoryRequestServer getMemoryRequestServer();
-
-  /**
-   * Returns true if the MemoryRequestServer has been configured.
-   * @return true if the MemoryRequestServer has been configured.
-   */
-  boolean hasMemoryRequestServer();
-
-  /**
-   * Is the underlying resource scope alive?
-   * @return true, if the underlying resource scope is alive.
-   */
-  boolean isAlive();
-
-  /**
-   * Returns true if this instance is a Buffer or WritableBuffer instance.
-   * @return true if this instance is a Buffer or WritableBuffer instance.
-   */
-  boolean isBuffer();
-
-  /**
-   * Returns true if this instance is a duplicate of a Buffer instance.
-   * @return true if this instance is a duplicate of a Buffer instance.
-   */
-  boolean isDuplicate();
-
-  /**
-   * Returns true if the backing resource is on the Java heap.
-   * This can be true for wrapped heap primitive arrays
-   * or from a wrapped ByteBuffer that was allocated on the Java heap.
-   * @return true if the backing resource is on the Java heap.
-   */
-  boolean isHeap();
-
   /**
    * Tells whether or not the contents of this mapped segment is resident in 
physical memory. Please refer to
    * <a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/jdk.incubator.foreign/jdk/incubator/foreign/MemorySegment.html#isLoaded()">isLoaded()</a>
@@ -212,24 +227,6 @@ public interface BaseState {
    */
   boolean isLoaded();
 
-  /**
-   * Returns true if this instance is of a memory mapped file.
-   * @return true if this instance is of a memory mapped file.
-   */
-  boolean isMapped();
-
-  /**
-   * Returns true if this instance is of a Memory or WritableMemory instance
-   * @return true if this instance is of a Memory or WritableMemory instance
-   */
-  boolean isMemory();
-
-  /**
-   * Returns true if this instance is a region view of another Memory or Buffer
-   * @return true if this instance is a region view of another Memory or Buffer
-   */
-  boolean isRegion();
-
   /**
    * Loads the contents of this mapped segment into physical memory. Please 
refer to
    * <a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/jdk.incubator.foreign/jdk/incubator/foreign/MemorySegment.html#load()">load()</a>
diff --git 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java
 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java
index b95f90e..bd445f8 100644
--- 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java
+++ 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseStateImpl.java
@@ -44,6 +44,7 @@ abstract class BaseStateImpl implements BaseState {
   static final String JDK; //must be at least "1.8"
   static final int JDK_MAJOR; //8, 11, 17, etc
 
+  //Used to convert "type" to bytes:  bytes = longs << LONG_SHIFT
   static final int BOOLEAN_SHIFT    = 0;
   static final int BYTE_SHIFT       = 0;
   static final long SHORT_SHIFT     = 1;
@@ -53,7 +54,8 @@ abstract class BaseStateImpl implements BaseState {
   static final long FLOAT_SHIFT     = 2;
   static final long DOUBLE_SHIFT    = 3;
 
-  //class type IDs.
+  //class type IDs. Do not change the bit orders
+  //The first 3 bits are set dynamically
   // 0000 0XXX Group 1
   static final int READONLY  = 1;
   static final int REGION    = 1 << 1;
@@ -207,7 +209,7 @@ abstract class BaseStateImpl implements BaseState {
     final MemorySegment seg = state.seg;
     final long capacity = seg.byteSize();
     checkBounds(offsetBytes, lengthBytes, capacity);
-    final StringBuilder sb = new StringBuilder();
+
     final String theComment = (comment != null) ? comment : "";
     final String addHCStr = "" + Integer.toHexString(seg.address().hashCode());
     final MemoryRequestServer memReqSvr = state.getMemoryRequestServer();
@@ -215,8 +217,9 @@ abstract class BaseStateImpl implements BaseState {
         ? memReqSvr.getClass().getSimpleName() + ", " + 
Integer.toHexString(memReqSvr.hashCode())
         : "null";
 
+    final StringBuilder sb = new StringBuilder();
     sb.append(LS + "### DataSketches Memory Component SUMMARY ###").append(LS);
-    sb.append("Optional Comment       : ").append(theComment).append(LS);
+    sb.append("Header Comment       : ").append(theComment).append(LS);
     sb.append("TypeId String          : 
").append(typeDecode(state.typeId)).append(LS);
     sb.append("OffsetBytes            : ").append(offsetBytes).append(LS);
     sb.append("LengthBytes            : ").append(lengthBytes).append(LS);
@@ -294,14 +297,14 @@ abstract class BaseStateImpl implements BaseState {
 
   //**NON STATIC METHODS*****************************************
 
-  @Override
+  @Override //Java 17 only
   public final ByteBuffer asByteBufferView(final ByteOrder order) {
     final ByteBuffer byteBuf = seg.asByteBuffer().order(order);
     return byteBuf;
   }
 
   //@SuppressWarnings("resource")
-  @Override
+  @Override //Java 17 only
   public void close() { //moved here
     if (seg != null && seg.scope().isAlive() && !seg.scope().isImplicit()) {
       if (seg.isNative() || seg.isMapped()) {
@@ -317,7 +320,7 @@ abstract class BaseStateImpl implements BaseState {
     return CompareAndCopy.equals(seg, thisOffsetBytes, ((BaseStateImpl) 
that).seg, thatOffsetBytes, lengthBytes);
   }
 
-  @Override
+  @Override //Java 17 only
   public void force() { seg.force(); } //moved here
 
   @Override
@@ -335,25 +338,15 @@ abstract class BaseStateImpl implements BaseState {
     return memReqSvr;
   }
 
-  @Override
-  public final boolean hasByteBuffer() {
-    return (typeId & BYTEBUF) > 0;
-  }
-
-  @Override
-  public boolean hasMemoryRequestServer() {
-    return memReqSvr != null;
-  }
-
   //@SuppressWarnings("resource")
   @Override
-  public boolean isAlive() { //Java 17 only
+  public boolean isAlive() {
     return seg.scope().isAlive();
   }
 
   @Override
-  public final boolean isBuffer() {
-    return (typeId & BUFFER) > 0;
+  public final boolean isByteBufferResource() {
+    return (typeId & BYTEBUF) > 0;
   }
 
   @Override
@@ -363,35 +356,35 @@ abstract class BaseStateImpl implements BaseState {
   }
 
   @Override
-  public final boolean isDirect() {
+  public final boolean isDirectResource() {
     assert seg.isNative() == (typeId & DIRECT) > 0;
     return seg.isNative();
   }
 
   @Override
-  public final boolean isDuplicate() {
+  public final boolean isDuplicateBufferView() {
     return (typeId & DUPLICATE) > 0;
   }
 
-  @Override
-  public final boolean isHeap() {
-    return !isDirect() && !isMapped();
-  }
-
-  @Override
+  @Override //Java 17 only
   public boolean isLoaded() { return seg.isLoaded(); }
 
   @Override
-  public boolean isMapped() {
+  public boolean isMemoryMappedFileResource() {
     assert seg.isMapped() == (typeId & MAP) > 0;
     return seg.isMapped();
   }
 
   @Override
-  public final boolean isMemory() {
+  public final boolean isMemoryApi() {
     return (typeId & BUFFER) == 0;
   }
 
+  @Override
+  public boolean isNonNativeOrder() {
+    return (typeId & NONNATIVE) > 0;
+  }
+
   @Override
   public final boolean isReadOnly() {
     assert seg.isReadOnly() == (typeId & READONLY) > 0;
@@ -399,11 +392,11 @@ abstract class BaseStateImpl implements BaseState {
   }
 
   @Override
-  public final boolean isRegion() {
+  public final boolean isRegionView() { //isRegionView
     return (typeId & REGION) > 0;
   }
 
-  @Override
+  @Override //Java 17 only
   public void load() { seg.load(); } //moved here
 
   @Override
@@ -414,7 +407,7 @@ abstract class BaseStateImpl implements BaseState {
     return seg.mismatch(thatBSI.seg);
   }
 
-  @Override
+  @Override //Java 17 only
   public final long nativeOverlap(final BaseState that) { //Java 17 only
     if (that == null) { return 0; }
     if (!that.isAlive()) { return 0; }
@@ -471,7 +464,7 @@ abstract class BaseStateImpl implements BaseState {
     return ByteBuffer.wrap(seg.toByteArray());
   }
 
-  @Override  //Java 17 only
+  @Override
   public final String toHexString(final String comment, final long 
offsetBytes, final int lengthBytes,
       final boolean withData) {
     return toHex(this, comment, offsetBytes, lengthBytes, withData);
@@ -484,7 +477,7 @@ abstract class BaseStateImpl implements BaseState {
     return arrSeg;
   }
 
-  @Override
+  @Override //Java 17 only
   public void unload() { seg.unload(); } //moved here
 
   @Override
diff --git 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
index 8692aa0..07a2a31 100644
--- 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
+++ 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
@@ -129,11 +129,11 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
     final MemorySegment slice = (readOnly && !seg.isReadOnly())
         ? seg.asSlice(offsetBytes, capacityBytes).asReadOnly()
         : seg.asSlice(offsetBytes, capacityBytes);
-    final boolean duplicateType = isDuplicate();
+    final boolean duplicateType = isDuplicateBufferView();
     final boolean mapType = seg.isMapped();
     final boolean directType = seg.isNative();
     final boolean nativeBOType = byteOrder == ByteOrder.nativeOrder();
-    final boolean byteBufferType = hasByteBuffer();
+    final boolean byteBufferType = isByteBufferResource();
     final int type = BUFFER | REGION
         | (readOnly ? READONLY : 0)
         | (duplicateType ? DUPLICATE : 0)
@@ -178,11 +178,11 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
     if (!this.isAlive()) { throw new IllegalStateException("This Memory is not 
alive."); }
     final boolean readOnly = isReadOnly() || localReadOnly;
     final MemorySegment seg2 = (readOnly && !seg.isReadOnly()) ? 
seg.asReadOnly() : seg;
-    final boolean regionType = isRegion();
+    final boolean regionType = isRegionView();
     final boolean mapType = seg.isMapped();
     final boolean directType = seg.isNative();
     final boolean nativeBOType = byteOrder == ByteOrder.nativeOrder();
-    final boolean byteBufferType = hasByteBuffer();
+    final boolean byteBufferType = isByteBufferResource();
     final int type = BUFFER | DUPLICATE
         | (readOnly ? READONLY : 0)
         | (regionType ? REGION : 0)
@@ -217,12 +217,12 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
     Objects.requireNonNull(byteOrder, "byteOrder must be non-null");
     final boolean readOnly = isReadOnly() || localReadOnly;
     final MemorySegment seg2 = (readOnly && !seg.isReadOnly()) ? 
seg.asReadOnly() : seg;
-    final boolean regionType = isRegion();
-    final boolean duplicateType = isDuplicate();
+    final boolean regionType = isRegionView();
+    final boolean duplicateType = isDuplicateBufferView();
     final boolean mapType = seg.isMapped();
     final boolean directType = seg.isNative();
     final boolean nativeBOType = byteOrder == ByteOrder.nativeOrder();
-    final boolean byteBufferType = hasByteBuffer();
+    final boolean byteBufferType = isByteBufferResource();
     final int type = MEMORY
         | (readOnly ? READONLY : 0)
         | (regionType ? REGION : 0)
diff --git 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
index a0ca068..0e043ab 100644
--- 
a/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
+++ 
b/datasketches-memory-java17/src/main/java17/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
@@ -208,11 +208,11 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
     final MemorySegment slice = (readOnly && !seg.isReadOnly())
         ? seg.asSlice(offsetBytes, capacityBytes).asReadOnly()
         : seg.asSlice(offsetBytes, capacityBytes);
-    final boolean duplicateType = isDuplicate();
+    final boolean duplicateType = isDuplicateBufferView();
     final boolean mapType = seg.isMapped();
     final boolean directType = seg.isNative();
     final boolean nativeBOType = byteOrder == ByteOrder.nativeOrder();
-    final boolean byteBufferType = hasByteBuffer();
+    final boolean byteBufferType = isByteBufferResource();
     final int type = MEMORY | REGION
         | (readOnly ? READONLY : 0)
         | (duplicateType ? DUPLICATE : 0)
@@ -246,12 +246,12 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
     Objects.requireNonNull(byteOrder, "byteOrder must be non-null");
     final boolean readOnly = isReadOnly() || localReadOnly;
     final MemorySegment seg2 = (readOnly && !seg.isReadOnly()) ? 
seg.asReadOnly() : seg;
-    final boolean regionType = isRegion();
-    final boolean duplicateType = isDuplicate();
+    final boolean regionType = isRegionView();
+    final boolean duplicateType = isDuplicateBufferView();
     final boolean mapType = seg.isMapped();
     final boolean directType = seg.isNative();
     final boolean nativeBOType = byteOrder == ByteOrder.nativeOrder();
-    final boolean byteBufferType = hasByteBuffer();
+    final boolean byteBufferType = isByteBufferResource();
     final int type = BUFFER
         | (readOnly ? READONLY : 0)
         | (regionType ? REGION : 0)
diff --git 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
index 0032059..ff5bddb 100644
--- 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
+++ 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
@@ -34,7 +34,7 @@ import jdk.incubator.foreign.ResourceScope;
 public class AllocateDirectMemoryTest {
   private static final MemoryRequestServer memReqSvr = 
BaseState.defaultMemReqSvr;
 
-  @SuppressWarnings("resource")
+  //@SuppressWarnings("resource")
   @Test
   public void simpleAllocateDirect() {
     int longs = 32;
@@ -69,7 +69,7 @@ public class AllocateDirectMemoryTest {
       int longs2 = 64;
       int bytes2 = longs2 << 3;
       WritableMemory newWmem = memReqSvr.request(wmem, bytes2); //on the heap
-      assertFalse(newWmem.isDirect()); //on heap by default
+      assertFalse(newWmem.isDirectResource()); //on heap by default
       for (int i = 0; i < longs2; i++) {
           newWmem.putLong(i << 3, i);
           assertEquals(newWmem.getLong(i << 3), i);
@@ -78,7 +78,7 @@ public class AllocateDirectMemoryTest {
     } // So we let the TWR close it here
   }
 
-  @SuppressWarnings("resource")
+  //@SuppressWarnings("resource")
   @Test
   public void checkNonNativeDirect() {
     WritableMemory wmem = null;
@@ -90,7 +90,7 @@ public class AllocateDirectMemoryTest {
     }
   }
 
-  @SuppressWarnings("resource")
+  //@SuppressWarnings("resource")
   @Test
   public void checkExplicitCloseNoTWR() {
     final long cap = 128;
diff --git 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/Buffer2Test.java
 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/Buffer2Test.java
index d1eb6cb..bbb3d91 100644
--- 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/Buffer2Test.java
+++ 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/Buffer2Test.java
@@ -53,7 +53,7 @@ public class Buffer2Test {
     while (buffer.hasRemaining()) {
       assertEquals(bb.get(), buffer.getByte());
     }
-    assertEquals(true, buffer.hasByteBuffer());
+    assertEquals(true, buffer.isByteBufferResource());
   }
 
   @Test
@@ -72,7 +72,7 @@ public class Buffer2Test {
       assertEquals(bb.get(), buffer.getByte());
     }
 
-    assertEquals(true, buffer.hasByteBuffer());
+    assertEquals(true, buffer.isByteBufferResource());
   }
 
   @Test
@@ -94,7 +94,7 @@ public class Buffer2Test {
     buffer.getByteArray(copyByteArray, 0, 64);
     assertEquals(byteArray, copyByteArray);
 
-    assertEquals(false, buffer.hasByteBuffer());
+    assertEquals(false, buffer.isByteBufferResource());
   }
 
   @Test
diff --git 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
index a9fce8a..ac555b4 100644
--- 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
+++ 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
@@ -61,14 +61,14 @@ public class DruidIssue11544Test {
 
     //Wrap bb into WritableMemory
     WritableMemory mem1 = WritableMemory.writableWrap(bb);
-    assertTrue(mem1.isDirect()); //confirm mem1 is off-heap
+    assertTrue(mem1.isDirectResource()); //confirm mem1 is off-heap
 
     //Request Bigger Memory
     int size2 = size1 * 2;
     WritableMemory mem2 = memReqSvr.request(mem1, size2);
 
     //Confirm that mem2 is on the heap (the default) and 2X size1
-    assertFalse(mem2.isDirect());
+    assertFalse(mem2.isDirectResource());
     assertEquals(mem2.getCapacity(), size2);
 
     //Move data to new memory
@@ -85,7 +85,7 @@ public class DruidIssue11544Test {
     WritableMemory mem3 = memReqSvr.request(mem2, size3);
 
     //Confirm that mem3 is still on the heap and 2X of size2
-    assertFalse(mem3.isDirect());
+    assertFalse(mem3.isDirectResource());
     assertEquals(mem3.getCapacity(), size3);
 
     //Move data to new memory
diff --git 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java
 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java
index 59f3f66..968cc95 100644
--- 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java
+++ 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/LeafImplTest.java
@@ -41,8 +41,6 @@ import jdk.incubator.foreign.ResourceScope;
  * @author Lee Rhodes
  */
 public class LeafImplTest {
-  private static final ByteOrder NBO = NATIVE_BYTE_ORDER;
-  private static final ByteOrder NNBO = NON_NATIVE_BYTE_ORDER;
   private static final MemoryRequestServer dummyMemReqSvr = new 
DummyMemoryRequestServer();
 
   static class DummyMemoryRequestServer implements MemoryRequestServer {
@@ -53,7 +51,7 @@ public class LeafImplTest {
   }
 
   private static ByteOrder otherByteOrder(final ByteOrder order) {
-    return (order == ByteOrder.nativeOrder()) ? NNBO : ByteOrder.nativeOrder();
+    return (order == NATIVE_BYTE_ORDER) ? NON_NATIVE_BYTE_ORDER : 
NATIVE_BYTE_ORDER;
   }
 
   @Test
@@ -62,17 +60,17 @@ public class LeafImplTest {
     long cap = 128;
     // Off Heap, Native order, No ByteBuffer, has MemReqSvr
     try (ResourceScope scope = ResourceScope.newConfinedScope()) {
-      WritableMemory memNO = WritableMemory.allocateDirect(cap, 8, scope, NBO, 
dummyMemReqSvr);
+      WritableMemory memNO = WritableMemory.allocateDirect(cap, 8, scope, 
NATIVE_BYTE_ORDER, dummyMemReqSvr);
       memNO.putShort(0, (short) 1);
-      assertTrue(memNO.isDirect());
-      checkCombinations(memNO, off, cap, memNO.isDirect(), NBO, false, true);
+      assertTrue(memNO.isDirectResource());
+      checkCombinations(memNO, off, cap, memNO.isDirectResource(), 
NATIVE_BYTE_ORDER, false, true);
     }
     // Off Heap, Non Native order, No ByteBuffer, has MemReqSvr
     try (ResourceScope scope = ResourceScope.newConfinedScope()) {
-      WritableMemory memNNO = WritableMemory.allocateDirect(cap, 8, scope, 
NNBO, dummyMemReqSvr);
+      WritableMemory memNNO = WritableMemory.allocateDirect(cap, 8, scope, 
NON_NATIVE_BYTE_ORDER, dummyMemReqSvr);
       memNNO.putShort(0, (short) 1);
-      assertTrue(memNNO.isDirect());
-      checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNBO, false, 
true);
+      assertTrue(memNNO.isDirectResource());
+      checkCombinations(memNNO, off, cap, memNNO.isDirectResource(), 
NON_NATIVE_BYTE_ORDER, false, true);
     }
   }
 
@@ -82,39 +80,39 @@ public class LeafImplTest {
     long cap = 128;
     //BB on heap, native order, has ByteBuffer, has MemReqSvr
     ByteBuffer bb = ByteBuffer.allocate((int)cap);
-    bb.order(NBO);
+    bb.order(NATIVE_BYTE_ORDER);
     bb.putShort(0, (short) 1);
-    WritableMemory mem = WritableMemory.writableWrap(bb, NBO, dummyMemReqSvr);
-    assertEquals(bb.isDirect(), mem.isDirect());
+    WritableMemory mem = WritableMemory.writableWrap(bb, NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
+    assertEquals(bb.isDirect(), mem.isDirectResource());
 
-    checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, 
false);
+    checkCombinations(mem, off, cap, mem.isDirectResource(), 
mem.getByteOrder(), true, false);
 
     //BB off heap, native order, has ByteBuffer, has MemReqSvr
     ByteBuffer dbb = ByteBuffer.allocateDirect((int)cap);
-    dbb.order(NBO);
+    dbb.order(NATIVE_BYTE_ORDER);
     dbb.putShort(0, (short) 1);
-    mem = WritableMemory.writableWrap(dbb, NBO, dummyMemReqSvr);
-    assertEquals(dbb.isDirect(), mem.isDirect());
+    mem = WritableMemory.writableWrap(dbb, NATIVE_BYTE_ORDER, dummyMemReqSvr);
+    assertEquals(dbb.isDirect(), mem.isDirectResource());
 
-    checkCombinations(mem, off, cap,  mem.isDirect(), mem.getByteOrder(), 
true, false);
+    checkCombinations(mem, off, cap,  mem.isDirectResource(), 
mem.getByteOrder(), true, false);
 
     //BB on heap, non native order, has ByteBuffer, has MemReqSvr
     bb = ByteBuffer.allocate((int)cap);
-    bb.order(NNBO);
+    bb.order(NON_NATIVE_BYTE_ORDER);
     bb.putShort(0, (short) 1);
-    mem = WritableMemory.writableWrap(bb, NNBO, dummyMemReqSvr);
-    assertEquals(bb.isDirect(), mem.isDirect());
+    mem = WritableMemory.writableWrap(bb, NON_NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
+    assertEquals(bb.isDirect(), mem.isDirectResource());
 
-    checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, 
false);
+    checkCombinations(mem, off, cap, mem.isDirectResource(), 
mem.getByteOrder(), true, false);
 
     //BB off heap, non native order, has ByteBuffer, has MemReqSvr
     dbb = ByteBuffer.allocateDirect((int)cap);
-    dbb.order(NNBO);
+    dbb.order(NON_NATIVE_BYTE_ORDER);
     dbb.putShort(0, (short) 1);
-    mem = WritableMemory.writableWrap(dbb, NNBO, dummyMemReqSvr);
-    assertEquals(dbb.isDirect(), mem.isDirect());
+    mem = WritableMemory.writableWrap(dbb, NON_NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
+    assertEquals(dbb.isDirect(), mem.isDirectResource());
 
-    checkCombinations(mem, off, cap,  mem.isDirect(), mem.getByteOrder(), 
true, false);
+    checkCombinations(mem, off, cap,  mem.isDirectResource(), 
mem.getByteOrder(), true, false);
   }
 
   @Test
@@ -131,17 +129,17 @@ public class LeafImplTest {
     file.deleteOnExit();  //comment out if you want to examine the file.
     // Off Heap, Native order, No ByteBuffer, No MemReqSvr
     try (ResourceScope scope = ResourceScope.newConfinedScope()) {
-      WritableMemory memNO = WritableMemory.writableMap(file, off, cap, scope, 
NBO);
+      WritableMemory memNO = WritableMemory.writableMap(file, off, cap, scope, 
NATIVE_BYTE_ORDER);
       memNO.putShort(0, (short) 1);
-      assertTrue(memNO.isDirect());
-      checkCombinations(memNO, off, cap, memNO.isDirect(), NBO, false, false);
+      assertTrue(memNO.isDirectResource());
+      checkCombinations(memNO, off, cap, memNO.isDirectResource(), 
NATIVE_BYTE_ORDER, false, false);
     }
     // Off heap, Non Native order, No ByteBuffer, no MemReqSvr
     try (ResourceScope scope = ResourceScope.newConfinedScope()) {
-      WritableMemory memNNO = WritableMemory.writableMap(file, off, cap, 
scope, NNBO);
+      WritableMemory memNNO = WritableMemory.writableMap(file, off, cap, 
scope, NON_NATIVE_BYTE_ORDER);
       memNNO.putShort(0, (short) 1);
-      assertTrue(memNNO.isDirect());
-      checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNBO, false, 
false);
+      assertTrue(memNNO.isDirectResource());
+      checkCombinations(memNNO, off, cap, memNNO.isDirectResource(), 
NON_NATIVE_BYTE_ORDER, false, false);
     }
   }
 
@@ -150,16 +148,16 @@ public class LeafImplTest {
     long off = 0;
     long cap = 128;
     // On Heap, Native order, No ByteBuffer, MemReqSvr
-    WritableMemory memNO = WritableMemory.allocate((int)cap, NBO, 
dummyMemReqSvr); //assumes NBO
+    WritableMemory memNO = WritableMemory.allocate((int)cap, 
NATIVE_BYTE_ORDER, dummyMemReqSvr); //assumes NATIVE_BYTE_ORDER
     memNO.putShort(0, (short) 1);
-    assertFalse(memNO.isDirect());
-    checkCombinations(memNO, off, cap, memNO.isDirect(), NBO, false, true);
+    assertFalse(memNO.isDirectResource());
+    checkCombinations(memNO, off, cap, memNO.isDirectResource(), 
NATIVE_BYTE_ORDER, false, true);
 
     // On Heap, Non-native order, No ByteBuffer, MemReqSvr
-    WritableMemory memNNO = WritableMemory.allocate((int)cap, NNBO, 
dummyMemReqSvr);
+    WritableMemory memNNO = WritableMemory.allocate((int)cap, 
NON_NATIVE_BYTE_ORDER, dummyMemReqSvr);
     memNNO.putShort(0, (short) 1);
-    assertFalse(memNNO.isDirect());
-    checkCombinations(memNNO, off, cap, memNNO.isDirect(), NNBO, false, true);
+    assertFalse(memNNO.isDirectResource());
+    checkCombinations(memNNO, off, cap, memNNO.isDirectResource(), 
NON_NATIVE_BYTE_ORDER, false, true);
   }
 
   private static void checkCombinations(WritableMemory mem, long off, long cap,
@@ -173,18 +171,18 @@ public class LeafImplTest {
     assertEquals(mem.asWritableBuffer(oo).getShort(0), 256);
     assertTrue(mem.getByteOrder() == bo);
 
-    if (fromByteBuffer) { assertTrue(mem.hasByteBuffer()); }
-    else { assertFalse(mem.hasByteBuffer()); }
+    if (fromByteBuffer) { assertTrue(mem.isByteBufferResource()); }
+    else { assertFalse(mem.isByteBufferResource()); }
 
     if (hasMemReqSvr) {
-      assertTrue(mem.hasMemoryRequestServer());
+      assertTrue(mem.getMemoryRequestServer() != null);
       assertTrue(mem.getMemoryRequestServer() instanceof 
DummyMemoryRequestServer);
     }
 
     if (direct) {
-      assertTrue(mem.isDirect());
+      assertTrue(mem.isDirectResource());
     } else {
-      assertFalse(mem.isDirect());
+      assertFalse(mem.isDirectResource());
     }
     assertTrue(mem.isAlive() == true);
 
@@ -197,17 +195,17 @@ public class LeafImplTest {
     assertEquals(buf.writableDuplicate(oo).getShort(0), 256);
     assertTrue(buf.getByteOrder() == bo);
 
-    if (fromByteBuffer) { assertTrue(buf.hasByteBuffer()); }
+    if (fromByteBuffer) { assertTrue(buf.isByteBufferResource()); }
 
     if (hasMemReqSvr) {
-      assertTrue(buf.hasMemoryRequestServer());
+      assertTrue(mem.getMemoryRequestServer() != null);
       assertTrue(buf.getMemoryRequestServer() instanceof 
DummyMemoryRequestServer);
     }
 
     if (direct) {
-      assertTrue(buf.isDirect());
+      assertTrue(buf.isDirectResource());
     } else {
-      assertFalse(buf.isDirect());
+      assertFalse(buf.isDirectResource());
     }
     assertTrue(buf.isAlive() == true);
 
@@ -221,17 +219,17 @@ public class LeafImplTest {
 
     assertTrue(nnMem.getByteOrder() == oo);
 
-    if (fromByteBuffer) { assertTrue(nnMem.hasByteBuffer()); }
+    if (fromByteBuffer) { assertTrue(nnMem.isByteBufferResource()); }
 
     if (hasMemReqSvr) {
-      assertTrue(nnMem.hasMemoryRequestServer());
+      assertTrue(mem.getMemoryRequestServer() != null);
       assertTrue(nnMem.getMemoryRequestServer() instanceof 
DummyMemoryRequestServer);
     }
 
     if (direct) {
-      assertTrue(nnMem.isDirect());
+      assertTrue(nnMem.isDirectResource());
     } else {
-      assertFalse(nnMem.isDirect());
+      assertFalse(nnMem.isDirectResource());
     }
     assertTrue(nnMem.isAlive() == true);
 
@@ -245,16 +243,41 @@ public class LeafImplTest {
 
     assertTrue(nnBuf.getByteOrder() == oo);
 
-    if (fromByteBuffer) { assertTrue(nnBuf.hasByteBuffer()); }
+    if (fromByteBuffer) { assertTrue(nnBuf.isByteBufferResource()); }
 
     if (hasMemReqSvr) { assertTrue(nnBuf.getMemoryRequestServer() instanceof 
DummyMemoryRequestServer); }
 
     if (direct) {
-      assertTrue(nnBuf.isDirect());
+      assertTrue(nnBuf.isDirectResource());
     } else {
-      assertFalse(nnBuf.isDirect());
+      assertFalse(nnBuf.isDirectResource());
     }
     assertTrue(nnBuf.isAlive() == true);
   }
 
+  @Test
+  public void confirmByteBufferView() {
+    long le = 0X0807060504030201L;
+    long be = 0X0102030405060708L;
+    ByteBuffer bb = ByteBuffer.allocate(128);
+    bb.order(NATIVE_BYTE_ORDER);
+    bb.putLong(0, le);
+    WritableMemory mem = WritableMemory.writableWrap(bb, NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
+    assertEquals(le,  mem.getLong(0)); //mem reads what BB put
+    mem.putLong(0, be);
+    assertEquals(be, bb.getLong(0)); //BB reads what mem put
+    //This confirms that mem and BB both have a R/W view of the same backing 
store
+
+    //Changing the byte order never changes what is already in the backing 
store
+    //It will change how bytes in the store are interpreted going in or coming 
out.
+    bb.order(NON_NATIVE_BYTE_ORDER);
+    assertEquals(le, bb.getLong(0)); //converts to LE on read;
+    assertEquals(be, mem.getLong(0)); //backing memory is still BE!
+
+    WritableMemory mem2 = WritableMemory.writableWrap(bb, 
NON_NATIVE_BYTE_ORDER, dummyMemReqSvr);
+    assertEquals(le, mem2.getLong(0)); //converts to LE on read;
+    mem2.putLong(0, le); //should put it as BE
+    assertEquals(le, mem2.getLong(0)); //converts to LE on read;
+  }
+
 }
diff --git 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
index 142091e..f1a707c 100644
--- 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
+++ 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
@@ -238,7 +238,7 @@ public class NativeWritableBufferImplTest {
       assertEquals(wbuf.getByte(), byteBuf.get(i));
     }
 
-    assertTrue(wbuf.hasByteBuffer());
+    assertTrue(wbuf.isByteBufferResource());
     ByteBuffer byteBuf2 = wbuf.toByteBuffer(ByteOrder.nativeOrder());
     assertEquals(byteBuf2, byteBuf);
     //println( mem.toHexString("HeapBB", 0, memCapacity));
@@ -330,11 +330,11 @@ public class NativeWritableBufferImplTest {
   public void checkIsDirect() throws Exception {
     int memCapacity = 64;
     WritableBuffer mem = 
WritableMemory.allocate(memCapacity).asWritableBuffer();
-    assertFalse(mem.isDirect());
+    assertFalse(mem.isDirectResource());
     ResourceScope scope = ResourceScope.newConfinedScope();
     WritableMemory wmem = WritableMemory.allocateDirect(memCapacity, scope, 
memReqSvr);
     WritableBuffer wbuf = wmem.asWritableBuffer();
-    assertTrue(wbuf.isDirect());
+    assertTrue(wbuf.isDirectResource());
     wmem.close(); //immediate close
   }
 
diff --git 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
index c0768ff..a62ef30 100644
--- 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
+++ 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
@@ -429,7 +429,7 @@ public class NativeWritableMemoryImplTest {
       assertEquals(wmem.getByte(i), byteBuf.get(i));
     }
 
-    assertTrue(wmem.hasByteBuffer());
+    assertTrue(wmem.isByteBufferResource());
     ByteBuffer byteBuf2 = wmem.toByteBuffer(ByteOrder.nativeOrder());
     assertEquals(byteBuf2, byteBuf);
     //println( mem.toHexString("HeapBB", 0, memCapacity));
@@ -518,10 +518,10 @@ public class NativeWritableMemoryImplTest {
   public void checkIsDirect() throws Exception {
     int memCapacity = 64;
     WritableMemory mem = WritableMemory.allocate(memCapacity);
-    assertFalse(mem.isDirect());
+    assertFalse(mem.isDirectResource());
     try (ResourceScope scope = ResourceScope.newConfinedScope()) {
       WritableMemory wmem = WritableMemory.allocateDirect(memCapacity, scope, 
memReqSvr);
-      assertTrue(wmem.isDirect());
+      assertTrue(wmem.isDirectResource());
     }
   }
 
diff --git 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java
 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java
index 6c6bcf7..b08b07d 100644
--- 
a/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java
+++ 
b/datasketches-memory-java17/src/test/java17/org/apache/datasketches/memory/internal/SpecificLeafTest.java
@@ -52,11 +52,11 @@ public class SpecificLeafTest {
     bb.order(NATIVE_BYTE_ORDER);
 
     Memory mem = Memory.wrap(bb).region(0, bytes, NATIVE_BYTE_ORDER);
-    assertTrue(mem.hasByteBuffer());
+    assertTrue(mem.isByteBufferResource());
     assertTrue(mem.isReadOnly());
-    assertTrue(mem.isMemory());
-    assertFalse(mem.isDirect());
-    assertFalse(mem.isMapped());
+    assertTrue(mem.isMemoryApi());
+    assertFalse(mem.isDirectResource());
+    assertFalse(mem.isMemoryMappedFileResource());
     checkCrossLeafTypeIds(mem);
     Buffer buf = mem.asBuffer().region(0, bytes, NATIVE_BYTE_ORDER);
     assertEquals(buf.getByteOrder(), NATIVE_BYTE_ORDER);
@@ -66,11 +66,11 @@ public class SpecificLeafTest {
     Buffer buf2 = mem2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
     Buffer buf3 = buf2.duplicate();
 
-    assertTrue(mem.isRegion());
-    assertTrue(mem2.isRegion());
-    assertTrue(buf.isRegion());
-    assertTrue(buf2.isRegion());
-    assertTrue(buf3.isDuplicate());
+    assertTrue(mem.isRegionView());
+    assertTrue(mem2.isRegionView());
+    assertTrue(buf.isRegionView());
+    assertTrue(buf2.isRegionView());
+    assertTrue(buf3.isDuplicateBufferView());
   }
 
   @Test
@@ -79,8 +79,7 @@ public class SpecificLeafTest {
     try (ResourceScope scope = ResourceScope.newConfinedScope()) {
       WritableMemory wmem = WritableMemory.allocateDirect(bytes, scope, 
memReqSvr);
       assertFalse(((BaseStateImpl)wmem).isReadOnly());
-      assertTrue(wmem.isDirect());
-      assertFalse(wmem.isHeap());
+      assertTrue(wmem.isDirectResource());
       assertFalse(wmem.isReadOnly());
       checkCrossLeafTypeIds(wmem);
       WritableMemory nnwmem = wmem.writableRegion(0, bytes, 
NON_NATIVE_BYTE_ORDER);
@@ -93,12 +92,12 @@ public class SpecificLeafTest {
       Buffer buf2 = mem2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
       Buffer buf3 = buf2.duplicate();
 
-      assertTrue(mem.isRegion());
-      assertTrue(mem2.isRegion());
-      assertTrue(buf.isRegion());
-      assertTrue(buf2.isRegion());
-      assertTrue(buf3.isDuplicate());
-      assertTrue(mem2.isMemory());
+      assertTrue(mem.isRegionView());
+      assertTrue(mem2.isRegionView());
+      assertTrue(buf.isRegionView());
+      assertTrue(buf2.isRegionView());
+      assertTrue(buf3.isDuplicateBufferView());
+      assertTrue(mem2.isMemoryApi());
     }
   }
 
@@ -116,7 +115,7 @@ public class SpecificLeafTest {
     final long bytes = 128;
     try (ResourceScope scope = ResourceScope.newConfinedScope()) {
       WritableMemory mem = WritableMemory.writableMap(file, 0L, bytes, scope, 
ByteOrder.nativeOrder());
-      assertTrue(mem.isMapped());
+      assertTrue(mem.isMemoryMappedFileResource());
       assertFalse(mem.isReadOnly());
       checkCrossLeafTypeIds(mem);
       Memory nnreg = mem.region(0, bytes, NON_NATIVE_BYTE_ORDER);
@@ -129,14 +128,14 @@ public class SpecificLeafTest {
       Buffer buf2 = reg2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
       Buffer buf3 = buf2.duplicate();
 
-      assertTrue(reg.isRegion());
-      assertTrue(reg2.isRegion());
+      assertTrue(reg.isRegionView());
+      assertTrue(reg2.isRegionView());
       assertEquals(reg2.getByteOrder(), NON_NATIVE_BYTE_ORDER);
-      assertTrue(buf.isRegion());
-      assertFalse(buf.isMemory());
-      assertTrue(buf2.isRegion());
-      assertTrue(buf3.isDuplicate());
-      assertTrue(buf4.isDuplicate());
+      assertTrue(buf.isRegionView());
+      assertFalse(buf.isMemoryApi());
+      assertTrue(buf2.isRegionView());
+      assertTrue(buf3.isDuplicateBufferView());
+      assertTrue(buf4.isDuplicateBufferView());
     }
   }
 
@@ -144,7 +143,7 @@ public class SpecificLeafTest {
   public void checkHeapLeafs() {
     int bytes = 128;
     Memory mem = Memory.wrap(new byte[bytes]);
-    assertTrue(mem.isHeap());
+    assertFalse(mem.isDirectResource());
     assertTrue(((BaseStateImpl)mem).isReadOnly());
     checkCrossLeafTypeIds(mem);
     Memory nnreg = mem.region(0, bytes, NON_NATIVE_BYTE_ORDER);
@@ -157,46 +156,46 @@ public class SpecificLeafTest {
     Buffer buf2 = reg2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
     Buffer buf3 = buf2.duplicate();
 
-    assertFalse(mem.isRegion());
-    assertTrue(reg2.isRegion());
-    assertTrue(buf.isRegion());
-    assertTrue(buf2.isRegion());
-    assertTrue(buf3.isDuplicate());
-    assertTrue(buf4.isDuplicate());
+    assertFalse(mem.isRegionView());
+    assertTrue(reg2.isRegionView());
+    assertTrue(buf.isRegionView());
+    assertTrue(buf2.isRegionView());
+    assertTrue(buf3.isDuplicateBufferView());
+    assertTrue(buf4.isDuplicateBufferView());
   }
 
   private static void checkCrossLeafTypeIds(Memory mem) {
     Memory reg1 = mem.region(0, mem.getCapacity());
-    assertTrue(reg1.isRegion());
+    assertTrue(reg1.isRegionView());
 
     Buffer buf1 = reg1.asBuffer();
-    assertTrue(buf1.isRegion());
-    assertTrue(buf1.isBuffer());
+    assertTrue(buf1.isRegionView());
+    assertFalse(buf1.isMemoryApi());
     assertTrue(buf1.isReadOnly());
 
     Buffer buf2 = buf1.duplicate();
-    assertTrue(buf2.isRegion());
-    assertTrue(buf2.isBuffer());
-    assertTrue(buf2.isDuplicate());
+    assertTrue(buf2.isRegionView());
+    assertFalse(buf1.isMemoryApi());
+    assertTrue(buf2.isDuplicateBufferView());
     assertTrue(buf2.isReadOnly());
 
     Memory mem2 = buf1.asMemory(); //
-    assertTrue(mem2.isRegion());
-    assertFalse(mem2.isBuffer());
-    assertFalse(mem2.isDuplicate());
+    assertTrue(mem2.isRegionView());
+    assertTrue(mem2.isMemoryApi());
+    assertFalse(mem2.isDuplicateBufferView());
     assertTrue(mem2.isReadOnly());
 
     Buffer buf3 = buf1.duplicate(NON_NATIVE_BYTE_ORDER);
-    assertTrue(buf3.isRegion());
-    assertTrue(buf3.isBuffer());
-    assertTrue(buf3.isDuplicate());
+    assertTrue(buf3.isRegionView());
+    assertFalse(buf1.isMemoryApi());
+    assertTrue(buf3.isDuplicateBufferView());
     assertEquals(buf3.getByteOrder(), NON_NATIVE_BYTE_ORDER);
     assertTrue(buf3.isReadOnly());
 
     Memory mem3 = buf3.asMemory();
-    assertTrue(mem3.isRegion());
-    assertFalse(mem3.isBuffer());
-    assertTrue(mem3.isDuplicate());
+    assertTrue(mem3.isRegionView());
+    assertTrue(mem2.isMemoryApi());
+    assertTrue(mem3.isDuplicateBufferView());
     assertEquals(mem3.getByteOrder(), NON_NATIVE_BYTE_ORDER);
     assertTrue(mem3.isReadOnly());
   }
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
index 1ed7378..2a6858f 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/BaseState.java
@@ -71,18 +71,24 @@ public interface BaseState {
   long getCapacity();
 
   /**
-   * Returns true if this Memory is backed by a ByteBuffer.
-   * @return true if this Memory is backed by a ByteBuffer.
+   * Returns the MemoryRequestSever or null, if it has not been configured.
+   * @return the MemoryRequestSever or null, if it has not been configured.
    */
-  boolean hasByteBuffer();
+  MemoryRequestServer getMemoryRequestServer();
 
   /**
-   * Is this resource alive?
-   * @return true, if this resource is alive. That is, it has not been closed.
-   * @see close()
+   * Is the underlying resource alive?
+   * @return true, if the underlying resource is alive.
+   * @See {@link java.lang.AutoCloseable#close()}
    */
   boolean isAlive();
 
+  /**
+   * Returns true if this Memory is backed by a ByteBuffer.
+   * @return true if this Memory is backed by a ByteBuffer.
+   */
+  boolean isByteBufferResource();
+
   /**
    * Returns true if the Native ByteOrder is the same as the ByteOrder of the
    * current Buffer or Memory and the same ByteOrder as the given byteOrder.
@@ -93,28 +99,69 @@ public interface BaseState {
   boolean isByteOrderCompatible(ByteOrder byteOrder);
 
   /**
-   * Returns true if the backing resource is direct (off-heap) memory.
+   * If true, the backing resource is direct (off-heap) memory.
    * This is the case for allocated direct memory, memory mapped files,
    * or from a wrapped ByteBuffer that was allocated direct.
+   * If false, the backing resource is the normal Java heap.
    * @return true if the backing resource is direct (off-heap) memory.
    */
-  boolean isDirect();
+  boolean isDirectResource();
+
+  /**
+   * Returns true if this instance is a duplicate of a Buffer instance.
+   * @return true if this instance is a duplicate of a Buffer instance.
+   */
+  boolean isDuplicateBufferView();
+
+  /**
+   * If true, this is a <i>Memory</i> or <i>WritableMemory</i> instance, which 
provides
+   * the Memory API.
+   * The Memory API is the principal API for this Memory Component.
+   * It provides a rich variety of direct manipulations of four types of 
resources:
+   * On-heap memory, direct (off-heap) memory, memory-mapped files, and 
ByteBuffers.
+   * If false, this is a <i>Buffer</i> or <i>WritableBuffer</i> instance, 
which provides the Buffer API.
+   * The Buffer API is largely parallel to the Memory API except that it adds 
a positional API
+   * similar to that in <i>ByteBuffer</i>.  The positional API is a 
convenience when iterating over structured
+   * arrays, or buffering input or output streams (thus the name).
+   * @return true if this is a Buffer or WritableBuffer instance, which 
provides the Buffer API.
+   */
+  boolean isMemoryApi();
 
   /**
-   * Returns true if this object or the backing resource is read-only.
-   * @return true if this object or the backing resource is read-only.
+   * Returns true if the backing resource is a memory mapped file.
+   * @return true if the backing resource is a memory mapped file.
+   */
+  boolean isMemoryMappedFileResource();
+
+  /**
+   * If true, all put and get operations will assume the non-native ByteOrder.
+   * Otherwise, all put and get operations will assume the native ByteOrder.
+   * @return true, if all put and get operations will assume the non-native 
ByteOrder.
+   */
+  boolean isNonNativeOrder();
+
+  /**
+   * Returns true if this or the backing resource is read-only.
+   * @return true if this or the backing resource is read-only.
    */
   boolean isReadOnly();
 
   /**
-   * Returns a formatted hex string of a range of this object.
-   * Used primarily for testing.
-   * @param header a descriptive header
+   * Returns true if this instance is a region view of another Memory or Buffer
+   * @return true if this instance is a region view of another Memory or Buffer
+   */
+  boolean isRegionView();
+
+  /**
+   * Returns a description of this object with an optional formatted hex 
string of the data
+   * for the specified a range. Used primarily for testing.
+   * @param comment a description
    * @param offsetBytes offset bytes relative to this object start
    * @param lengthBytes number of bytes to convert to a hex string
-   * @return a formatted hex string in a human readable array
+   * @param withData include output listing of byte data in the given range
+   * @return a description and hex output in a human readable format.
    */
-  String toHexString(String header, long offsetBytes, int lengthBytes);
+  String toHexString(String comment, long offsetBytes, int lengthBytes, 
boolean withData);
 
   /**
    * Returns a 64-bit hash from a single long. This method has been optimized 
for speed when only
@@ -147,19 +194,10 @@ public interface BaseState {
    * @param that A different non-null object
    * @return true if the backing resource of <i>this</i> is the same as the 
backing resource
    * of <i>that</i>.
-   * @deprecated no longer supported as of Java 17 versions. Use 
nativeOverlap(BaseState) instead.
+   * @deprecated no longer supported as of Java 17 versions.
+   * With Java 17 use nativeOverlap(other) instead.
    */
   @Deprecated
   boolean isSameResource(Object that);
 
-  /**
-   * Returns true if this object is valid and has not been closed.
-   * This is relevant only for direct (off-heap) memory and Mapped Files.
-   * @return true if this object is valid and has not been closed.
-   * @deprecated no longer supported as of Java 17 versions. Use 
<i>isAlive()</i> instead.
-   */
-  //@Deprecated
-  @Deprecated
-  default boolean isValid() { return isAlive(); }
-
 }
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
index 17a9e36..d8b596b 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableBufferImpl.java
@@ -88,13 +88,13 @@ final class BBNonNativeWritableBufferImpl extends 
NonNativeWritableBufferImpl {
 
   @Override
   public ByteBuffer getByteBuffer() {
-    checkValid();
+    checkAlive();
     return byteBuf;
   }
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
@@ -110,7 +110,7 @@ final class BBNonNativeWritableBufferImpl extends 
NonNativeWritableBufferImpl {
 
   @Override
   Object getUnsafeObject() {
-    checkValid();
+    checkAlive();
     return unsafeObj;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
index b1c8482..a5d8c0e 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBNonNativeWritableMemoryImpl.java
@@ -78,13 +78,13 @@ final class BBNonNativeWritableMemoryImpl extends 
NonNativeWritableMemoryImpl {
 
   @Override
   public ByteBuffer getByteBuffer() {
-    checkValid();
+    checkAlive();
     return byteBuf;
   }
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
@@ -100,7 +100,7 @@ final class BBNonNativeWritableMemoryImpl extends 
NonNativeWritableMemoryImpl {
 
   @Override
   Object getUnsafeObject() {
-    checkValid();
+    checkAlive();
     return unsafeObj;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
index fac0215..e7da0b0 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableBufferImpl.java
@@ -88,13 +88,13 @@ final class BBWritableBufferImpl extends 
NativeWritableBufferImpl {
 
   @Override
   public ByteBuffer getByteBuffer() {
-    checkValid();
+    checkAlive();
     return byteBuf;
   }
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
@@ -110,7 +110,7 @@ final class BBWritableBufferImpl extends 
NativeWritableBufferImpl {
 
   @Override
   Object getUnsafeObject() {
-    checkValid();
+    checkAlive();
     return unsafeObj;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
index 27143dd..45fd2d6 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BBWritableMemoryImpl.java
@@ -78,13 +78,13 @@ final class BBWritableMemoryImpl extends 
NativeWritableMemoryImpl {
 
   @Override
   public ByteBuffer getByteBuffer() {
-    checkValid();
+    checkAlive();
     return byteBuf;
   }
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
@@ -100,7 +100,7 @@ final class BBWritableMemoryImpl extends 
NativeWritableMemoryImpl {
 
   @Override
   Object getUnsafeObject() {
-    checkValid();
+    checkAlive();
     return unsafeObj;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseBufferImpl.java
index 68c699e..a8e7c07 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseBufferImpl.java
@@ -111,7 +111,7 @@ public abstract class BaseBufferImpl extends BaseStateImpl 
implements BaseBuffer
 
   //checks are used for arrays and apply at runtime
   final void incrementAndCheckPosition(final long position, final long 
increment) {
-    checkValid();
+    checkAlive();
     final long newPos = position + increment;
     checkInvariants(start, newPos, end, capacity);
     pos = newPos;
@@ -125,7 +125,7 @@ public abstract class BaseBufferImpl extends BaseStateImpl 
implements BaseBuffer
   }
 
   final void checkValidForWrite() {
-    checkValid();
+    checkAlive();
     if (isReadOnly()) {
       throw new ReadOnlyException("Buffer is read-only.");
     }
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
index e21cea2..e71ef70 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseStateImpl.java
@@ -53,27 +53,25 @@ public abstract class BaseStateImpl implements BaseState {
 
   //class type IDs. Do not change the bit orders
   //The first 3 bits are set dynamically
-  // 0000 0XXX
-  static final int READONLY = 1;
-  static final int REGION = 2;
-  static final int DUPLICATE = 4;
-
-  //The following 5 bits are set by the 16 leaf nodes
-  // 000X X000
-  static final int HEAP = 0;
-  static final int DIRECT = 1 << 3;
-  static final int MAP = 2 << 3;
+  // 0000 0XXX Group 1
+  static final int READONLY  = 1;
+  static final int REGION    = 1 << 1;
+  static final int DUPLICATE = 1 << 2; //for Buffer only
 
+  // 000X X000 Group 2
+  static final int HEAP   = 0;
+  static final int DIRECT = 1 << 3;
+  static final int MAP    = 1 << 4; //Map is always Direct also
 
-  // 00X0 0000
-  static final int NATIVE = 0;
+  // 00X0 0000 Group 3
+  static final int NATIVE    = 0;
   static final int NONNATIVE = 1 << 5;
 
-  // 0X00 0000
+  // 0X00 0000 Group 4
   static final int MEMORY = 0;
   static final int BUFFER = 1 << 6;
 
-  // X000 0000
+  // X000 0000 Group 5
   static final int BYTEBUF = 1 << 7;
 
   /**
@@ -102,6 +100,8 @@ public abstract class BaseStateImpl implements BaseState {
    */
   final long cumBaseOffset_; //NOT USED in JDK 17
 
+  MemoryRequestServer memReqSvr = null; //selected by the user
+
   /**
    * Constructor
    * @param unsafeObj The primitive backing array. It may be null. Used by 
Unsafe calls.
@@ -181,16 +181,21 @@ public abstract class BaseStateImpl implements BaseState {
    * Returns a formatted hex string of an area of this object.
    * Used primarily for testing.
    * @param state the BaseStateImpl
-   * @param preamble a descriptive header
+   * @param comment a descriptive header
    * @param offsetBytes offset bytes relative to the MemoryImpl start
    * @param lengthBytes number of bytes to convert to a hex string
    * @return a formatted hex string in a human readable array
    */
-  static final String toHex(final BaseStateImpl state, final String preamble, 
final long offsetBytes,
-      final int lengthBytes) {
+  static final String toHex(final BaseStateImpl state, final String comment, 
final long offsetBytes,
+      final int lengthBytes, final boolean withData) {
     final long capacity = state.getCapacity();
     checkBounds(offsetBytes, lengthBytes, capacity);
-    final StringBuilder sb = new StringBuilder();
+
+    final String theComment = (comment != null) ? comment : "";
+    final String s1 = String.format("(..., %d, %d)", offsetBytes, lengthBytes);
+    final long hcode = state.hashCode() & 0XFFFFFFFFL;
+    final String call = ".toHexString" + s1 + ", hashCode: " + hcode;
+
     final Object uObj = state.getUnsafeObject();
     final String uObjStr;
     final long uObjHeader;
@@ -209,7 +214,11 @@ public abstract class BaseStateImpl implements BaseState {
         ? memReqSvr.getClass().getSimpleName() + ", " + (memReqSvr.hashCode() 
& 0XFFFFFFFFL)
         : "null";
     final long cumBaseOffset = state.getCumulativeOffset(0);
-    sb.append(preamble).append(LS);
+
+    final StringBuilder sb = new StringBuilder();
+    sb.append(LS + "### DataSketches Memory Component SUMMARY ###").append(LS);
+    sb.append("Header Comment      : ").append(theComment).append(LS);
+    sb.append("Call Parameters     : ").append(call);
     sb.append("UnsafeObj, hashCode : ").append(uObjStr).append(LS);
     sb.append("UnsafeObjHeader     : ").append(uObjHeader).append(LS);
     sb.append("ByteBuf, hashCode   : ").append(bbStr).append(LS);
@@ -217,21 +226,22 @@ public abstract class BaseStateImpl implements BaseState {
     sb.append("Capacity            : ").append(capacity).append(LS);
     sb.append("CumBaseOffset       : ").append(cumBaseOffset).append(LS);
     sb.append("MemReqSvr, hashCode : ").append(memReqStr).append(LS);
-    sb.append("Valid               : ").append(state.isAlive()).append(LS);
     sb.append("Read Only           : ").append(state.isReadOnly()).append(LS);
     sb.append("Type Byte Order     : 
").append(state.getByteOrder().toString()).append(LS);
     sb.append("Native Byte Order   : 
").append(NATIVE_BYTE_ORDER.toString()).append(LS);
     sb.append("JDK Runtime Version : ").append(JDK).append(LS);
     //Data detail
-    sb.append("Data, littleEndian  :  0  1  2  3  4  5  6  7");
-
-    for (long i = 0; i < lengthBytes; i++) {
-      final int b = unsafe.getByte(uObj, cumBaseOffset + offsetBytes + i) & 
0XFF;
-      if (i % 8 == 0) { //row header
-        sb.append(String.format("%n%20s: ", offsetBytes + i));
+    if (withData) {
+      sb.append("Data, littleEndian  :  0  1  2  3  4  5  6  7");
+      for (long i = 0; i < lengthBytes; i++) {
+        final int b = unsafe.getByte(uObj, cumBaseOffset + offsetBytes + i) & 
0XFF;
+        if (i % 8 == 0) { //row header
+          sb.append(String.format("%n%20s: ", offsetBytes + i));
+        }
+        sb.append(String.format("%02x ", b));
       }
-      sb.append(String.format("%02x ", b));
     }
+    sb.append(LS + "### END SUMMARY ###");
     sb.append(LS);
 
     return sb.toString();
@@ -287,7 +297,7 @@ public abstract class BaseStateImpl implements BaseState {
 
   //**NON STATIC METHODS*****************************************
 
-  void checkValid() { //Java 8 & 11 only
+  void checkAlive() { //Java 8 & 11 only
     if (!isAlive()) {
       throw new IllegalStateException("Memory not valid.");
     }
@@ -308,36 +318,39 @@ public abstract class BaseStateImpl implements BaseState {
 
   @Override
   public final ByteOrder getByteOrder() {
-    return isNonNativeType() ? NON_NATIVE_BYTE_ORDER : NATIVE_BYTE_ORDER;
+    return isNonNativeOrder() ? NON_NATIVE_BYTE_ORDER : NATIVE_BYTE_ORDER;
   }
 
   //Overridden by ByteBuffer Leafs
-  public ByteBuffer getByteBuffer() {
-    checkValid();
+  public ByteBuffer getByteBuffer() { //TODO Keep??
+    checkAlive();
     return null;
   }
 
   @Override
   public final long getCapacity() {
-    checkValid();
+    checkAlive();
     return capacityBytes_;
   }
 
-  public final long getCumulativeOffset(final long offsetBytes) { //Java 8 & 
11 only
-    checkValid();
+  final long getCumulativeOffset(final long offsetBytes) { //Java 8 & 11 only
+    checkAlive();
     return cumBaseOffset_ + offsetBytes;
   }
 
   //Documented in WritableMemory and WritableBuffer interfaces.
-  //Implemented in the Leaf nodes; Required here by toHex(...).
-  abstract MemoryRequestServer getMemoryRequestServer();
+  //Overridden in the Leaf nodes; Required here by toHex(...).
+  @Override
+  public MemoryRequestServer getMemoryRequestServer() {
+    return null;
+  }
 
   //Overridden by ByteBuffer, Direct and Map leafs
   long getNativeBaseOffset() { //Java 8 & 11 only
     return 0;
   }
 
-  public final long getRegionOffset(final long offsetBytes) { //Java 8 & 11 
only
+  final long getRegionOffset(final long offsetBytes) { //Java 8 & 11 only
     final Object unsafeObj = getUnsafeObject();
     return offsetBytes + (unsafeObj == null
         ? cumBaseOffset_ - getNativeBaseOffset()
@@ -353,31 +366,17 @@ public abstract class BaseStateImpl implements BaseState {
     return null;
   }
 
-  @Override
-  public final boolean hasByteBuffer() { //Java 8 & 11 only
-    checkValid();
-    return isByteBufferType();
-  }
-
-  @Override
-  public final int hashCode() { //Java 8 & 11 only
-    return (int) xxHash64(0, capacityBytes_, 0); //xxHash64() calls 
checkValid()
-  }
-
   //Overridden by Direct and Map leafs
   @Override
   public boolean isAlive() {
     return true;
   }
 
-  final boolean isByteBufferType() {
+  @Override
+  public final boolean isByteBufferResource() { //Java 8 & 11 only
     return (getTypeId() & BYTEBUF) > 0;
   }
 
-  final boolean isBufferType() {
-    return (getTypeId() & BUFFER) > 0;
-  }
-
   @Override
   public final boolean isByteOrderCompatible(final ByteOrder byteOrder) {
     final ByteOrder typeBO = getByteOrder();
@@ -385,54 +384,47 @@ public abstract class BaseStateImpl implements BaseState {
   }
 
   @Override
-  public final boolean isDirect() {
-    return getUnsafeObject() == null;
-  }
-
-  final boolean isDirectType() {
-    return (getTypeId() >>> 3 & 3) == 1;
+  public final boolean isDirectResource() {
+    final int bits = (getTypeId() >>> 3) & 3;
+    return bits == 1 || bits == 3 || getUnsafeObject() == null;
   }
 
-  final boolean isDuplicateType() {
+  @Override
+  public final boolean isDuplicateBufferView() {
     return (getTypeId() & DUPLICATE) > 0;
   }
 
-  final boolean isHeapType() {
-    return (getTypeId() >>> 3 & 3) == 0;
-  }
-
-  final boolean isMapType() {
+  @Override
+  public final boolean isMemoryMappedFileResource() {
     return (getTypeId() >>> 3 & 3) == 2;
   }
 
-  final boolean isMemoryType() {
+  @Override
+  public final boolean isMemoryApi() {
     return (getTypeId() & BUFFER) == 0;
   }
 
-  final boolean isNonNativeType() {
+  @Override
+  public final boolean isNonNativeOrder() {
     return (getTypeId() & NONNATIVE) > 0;
   }
 
   @Override
   public final boolean isReadOnly() {
-    checkValid();
-    return isReadOnlyType();
-  }
-
-  final boolean isReadOnlyType() {
     return (getTypeId() & READONLY) > 0;
   }
 
-  final boolean isRegionType() {
+  @Override
+  public final boolean isRegionView() {
     return (getTypeId() & REGION) > 0;
   }
 
-  @Override
-  public final boolean isSameResource(final Object that) { //Java 8 & 11 only
-    checkValid();
+  @Override //Java 8 & 11 only
+  public final boolean isSameResource(final Object that) {
+    checkAlive();
     if (that == null) { return false; }
     final BaseStateImpl that1 = (BaseStateImpl) that;
-    that1.checkValid();
+    that1.checkAlive();
     if (this == that1) { return true; }
 
     return cumBaseOffset_ == that1.cumBaseOffset_
@@ -442,23 +434,15 @@ public abstract class BaseStateImpl implements BaseState {
   }
 
   @Override
-  public final String toHexString(final String header, final long offsetBytes,
-      final int lengthBytes) {
-    checkValid();
-    final String klass = this.getClass().getSimpleName();
-    final String s1 = String.format("(..., %d, %d)", offsetBytes, lengthBytes);
-    final long hcode = hashCode() & 0XFFFFFFFFL;
-    final String call = ".toHexString" + s1 + ", hashCode: " + hcode;
-    final StringBuilder sb = new StringBuilder();
-    sb.append("### ").append(klass).append(" SUMMARY ###").append(LS);
-    sb.append("Header Comment      : ").append(header).append(LS);
-    sb.append("Call Parameters     : ").append(call);
-    return toHex(this, sb.toString(), offsetBytes, lengthBytes);
+  public final String toHexString(final String comment, final long offsetBytes,
+      final int lengthBytes, boolean withData) {
+    checkAlive();
+    return toHex(this, comment, offsetBytes, lengthBytes, withData);
   }
 
   @Override
   public final long xxHash64(final long offsetBytes, final long lengthBytes, 
final long seed) {
-    checkValid();
+    checkAlive();
     return XxHash64.hash(getUnsafeObject(), cumBaseOffset_ + offsetBytes, 
lengthBytes, seed);
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
index 4c1971a..f9e7a0e 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableBufferImpl.java
@@ -105,7 +105,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
     if (isReadOnly() && !localReadOnly) {
       throw new ReadOnlyException("Writable region of a read-only Buffer is 
not allowed.");
     }
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, capacityBytes, capacityBytes_);
     final boolean readOnly = isReadOnly() || localReadOnly;
     final WritableBuffer wbuf = toWritableRegion(offsetBytes, capacityBytes, 
readOnly, byteOrder);
@@ -183,7 +183,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
 
   @Override
   public final boolean getBoolean(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BOOLEAN_INDEX_SCALE, capacityBytes_);
     return unsafe.getBoolean(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -212,7 +212,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
 
   @Override
   public final byte getByte(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BYTE_INDEX_SCALE, capacityBytes_);
     return unsafe.getByte(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
@@ -240,7 +240,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final char getNativeOrderedChar(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_CHAR_INDEX_SCALE, capacityBytes_);
     return unsafe.getChar(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
@@ -252,7 +252,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final int getNativeOrderedInt(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_INT_INDEX_SCALE, capacityBytes_);
     return unsafe.getInt(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
@@ -264,7 +264,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final long getNativeOrderedLong(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     return unsafe.getLong(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
@@ -276,7 +276,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final short getNativeOrderedShort(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_SHORT_INDEX_SCALE, capacityBytes_);
     return unsafe.getShort(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -304,7 +304,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
 
   @Override
   public final void putBoolean(final long offsetBytes, final boolean value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BOOLEAN_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putBoolean(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
@@ -334,7 +334,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
 
   @Override
   public final void putByte(final long offsetBytes, final byte value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BYTE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putByte(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
@@ -363,7 +363,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final void putNativeOrderedChar(final long offsetBytes, final char value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_CHAR_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putChar(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
@@ -376,7 +376,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final void putNativeOrderedInt(final long offsetBytes, final int value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_INT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putInt(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
@@ -389,7 +389,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final void putNativeOrderedLong(final long offsetBytes, final long value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putLong(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
@@ -402,7 +402,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   }
 
   final void putNativeOrderedShort(final long offsetBytes, final short value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_SHORT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putShort(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
@@ -411,7 +411,7 @@ public abstract class BaseWritableBufferImpl extends 
BaseBufferImpl implements W
   //OTHER
   @Override
   public final Object getArray() {
-    checkValid();
+    checkAlive();
     return getUnsafeObject();
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
index d734742..4ca49ca 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/BaseWritableMemoryImpl.java
@@ -167,7 +167,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
     negativeCheck(offsetBytes, "offsetBytes must be >= 0");
     negativeCheck(capacityBytes, "capacityBytes must be >= 0");
     Objects.requireNonNull(byteOrder, "byteOrder must be non-null.");
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, capacityBytes, capacityBytes_);
     final boolean readOnly = isReadOnly() || localReadOnly;
     return toWritableRegion(offsetBytes, capacityBytes, readOnly, byteOrder);
@@ -204,7 +204,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   //PRIMITIVE getX() and getXArray()
   @Override
   public final boolean getBoolean(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BOOLEAN_INDEX_SCALE, capacityBytes_);
     return unsafe.getBoolean(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -213,7 +213,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   public final void getBooleanArray(final long offsetBytes, final boolean[] 
dstArray,
       final int dstOffsetBooleans, final int lengthBooleans) {
     final long copyBytes = lengthBooleans;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetBooleans, lengthBooleans, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -226,7 +226,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
 
   @Override
   public final byte getByte(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BYTE_INDEX_SCALE, capacityBytes_);
     return unsafe.getByte(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
@@ -235,7 +235,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   public final void getByteArray(final long offsetBytes, final byte[] dstArray,
       final int dstOffsetBytes, final int lengthBytes) {
     final long copyBytes = lengthBytes;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetBytes, lengthBytes, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -249,7 +249,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   @Override
   public final int getCharsFromUtf8(final long offsetBytes, final int 
utf8LengthBytes,
       final Appendable dst) throws IOException, Utf8CodingException {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, utf8LengthBytes, capacityBytes_);
     return Utf8.getCharsFromUtf8(offsetBytes, utf8LengthBytes, dst, 
getCumulativeOffset(0),
         getUnsafeObject());
@@ -269,25 +269,25 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
 
   //PRIMITIVE getX() Native Endian (used by both endians)
   final char getNativeOrderedChar(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_CHAR_INDEX_SCALE, capacityBytes_);
     return unsafe.getChar(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
 
   final int getNativeOrderedInt(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_INT_INDEX_SCALE, capacityBytes_);
     return unsafe.getInt(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
 
   final long getNativeOrderedLong(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     return unsafe.getLong(getUnsafeObject(), getCumulativeOffset(offsetBytes));
   }
 
   final short getNativeOrderedShort(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_SHORT_INDEX_SCALE, capacityBytes_);
     return unsafe.getShort(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -310,7 +310,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   @Override
   public final void writeTo(final long offsetBytes, final long lengthBytes,
       final WritableByteChannel out) throws IOException {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, lengthBytes, capacityBytes_);
     if (getUnsafeObject() instanceof byte[]) {
       writeByteArrayTo((byte[]) getUnsafeObject(), offsetBytes, lengthBytes, 
out);
@@ -326,7 +326,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   //PRIMITIVE putX() and putXArray() implementations
   @Override
   public final void putBoolean(final long offsetBytes, final boolean value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BOOLEAN_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putBoolean(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
@@ -336,7 +336,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   public final void putBooleanArray(final long offsetBytes, final boolean[] 
srcArray,
       final int srcOffsetBooleans, final int lengthBooleans) {
     final long copyBytes = lengthBooleans;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetBooleans, lengthBooleans, srcArray.length);
@@ -351,7 +351,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
 
   @Override
   public final void putByte(final long offsetBytes, final byte value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BYTE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putByte(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
@@ -361,7 +361,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   public final void putByteArray(final long offsetBytes, final byte[] srcArray,
       final int srcOffsetBytes, final int lengthBytes) {
     final long copyBytes = lengthBytes;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetBytes, lengthBytes, srcArray.length);
@@ -376,35 +376,35 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
 
   @Override
   public final long putCharsToUtf8(final long offsetBytes, final CharSequence 
src) {
-    checkValid();
+    checkAlive();
     return Utf8.putCharsToUtf8(offsetBytes, src, getCapacity(), 
getCumulativeOffset(0),
         getUnsafeObject());
   }
 
   //PRIMITIVE putX() Native Endian (used by both endians)
   final void putNativeOrderedChar(final long offsetBytes, final char value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_CHAR_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putChar(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
   }
 
   final void putNativeOrderedInt(final long offsetBytes, final int value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_INT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putInt(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
   }
 
   final void putNativeOrderedLong(final long offsetBytes, final long value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putLong(getUnsafeObject(), getCumulativeOffset(offsetBytes), value);
   }
 
   final void putNativeOrderedShort(final long offsetBytes, final short value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_SHORT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putShort(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
@@ -413,7 +413,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
   //OTHER WRITE METHODS
   @Override
   public final Object getArray() {
-    checkValid();
+    checkAlive();
     return getUnsafeObject();
   }
 
@@ -435,7 +435,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
 
   @Override
   public final void clearBits(final long offsetBytes, final byte bitMask) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BYTE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     final long cumBaseOff = getCumulativeOffset(offsetBytes);
@@ -451,7 +451,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
 
   @Override
   public final void fill(long offsetBytes, long lengthBytes, final byte value) 
{
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, lengthBytes, capacityBytes_);
     checkWritable();
     while (lengthBytes > 0) {
@@ -464,7 +464,7 @@ public abstract class BaseWritableMemoryImpl extends 
BaseStateImpl implements Wr
 
   @Override
   public final void setBits(final long offsetBytes, final byte bitMask) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_BYTE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     final long myOffset = getCumulativeOffset(offsetBytes);
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java
index 5be228d..d22d1e7 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java
@@ -40,9 +40,9 @@ final class CompareAndCopy {
   static int compare(
       final BaseStateImpl state1, final long offsetBytes1, final long 
lengthBytes1,
       final BaseStateImpl state2, final long offsetBytes2, final long 
lengthBytes2) {
-    state1.checkValid();
+    state1.checkAlive();
     checkBounds(offsetBytes1, lengthBytes1, state1.getCapacity());
-    state2.checkValid();
+    state2.checkAlive();
     checkBounds(offsetBytes2, lengthBytes2, state2.getCapacity());
     final long cumOff1 = state1.getCumulativeOffset(offsetBytes1);
     final long cumOff2 = state2.getCumulativeOffset(offsetBytes2);
@@ -72,9 +72,9 @@ final class CompareAndCopy {
   static boolean equals(
       final BaseStateImpl state1, final long offsetBytes1,
       final BaseStateImpl state2, final long offsetBytes2, long lengthBytes) {
-    state1.checkValid();
+    state1.checkAlive();
     checkBounds(offsetBytes1, lengthBytes, state1.getCapacity());
-    state2.checkValid();
+    state2.checkAlive();
     checkBounds(offsetBytes2, lengthBytes, state2.getCapacity());
     long cumOff1 = state1.getCumulativeOffset(offsetBytes1);
     long cumOff2 = state2.getCumulativeOffset(offsetBytes2);
@@ -114,9 +114,9 @@ final class CompareAndCopy {
 
   static void copy(final BaseStateImpl srcState, final long srcOffsetBytes,
       final BaseStateImpl dstState, final long dstOffsetBytes, final long 
lengthBytes) {
-    srcState.checkValid();
+    srcState.checkAlive();
     checkBounds(srcOffsetBytes, lengthBytes, srcState.getCapacity());
-    dstState.checkValid();
+    dstState.checkAlive();
     checkBounds(dstOffsetBytes, lengthBytes, dstState.getCapacity());
     final long srcAdd = srcState.getCumulativeOffset(srcOffsetBytes);
     final long dstAdd = dstState.getCumulativeOffset(dstOffsetBytes);
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java
index 1ea130d..ed69483 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableBufferImpl.java
@@ -84,7 +84,7 @@ final class DirectNonNativeWritableBufferImpl extends 
NonNativeWritableBufferImp
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java
index 484a193..90d182a 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectNonNativeWritableMemoryImpl.java
@@ -74,7 +74,7 @@ final class DirectNonNativeWritableMemoryImpl extends 
NonNativeWritableMemoryImp
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java
index 921480f..669e663 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableBufferImpl.java
@@ -84,7 +84,7 @@ final class DirectWritableBufferImpl extends 
NativeWritableBufferImpl {
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableMemoryImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableMemoryImpl.java
index 0f30939..bd97d1c 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableMemoryImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/DirectWritableMemoryImpl.java
@@ -74,7 +74,7 @@ final class DirectWritableMemoryImpl extends 
NativeWritableMemoryImpl {
 
   @Override
   public MemoryRequestServer getMemoryRequestServer() {
-    checkValid();
+    checkAlive();
     return memReqSvr;
   }
 
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java
index 2d10857..8b83e51 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java
@@ -79,7 +79,7 @@ abstract class NativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public double getDouble(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     return unsafe.getDouble(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -108,7 +108,7 @@ abstract class NativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public float getFloat(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     return unsafe.getFloat(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -235,7 +235,7 @@ abstract class NativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public void putDouble(final long offsetBytes, final double value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putDouble(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
@@ -265,7 +265,7 @@ abstract class NativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public void putFloat(final long offsetBytes, final float value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putFloat(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java
index 8586d97..44f9113 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImpl.java
@@ -56,7 +56,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getCharArray(final long offsetBytes, final char[] dstArray, 
final int dstOffsetChars,
       final int lengthChars) {
     final long copyBytes = ((long) lengthChars) << CHAR_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetChars, lengthChars, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -69,7 +69,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public double getDouble(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     return unsafe.getDouble(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -78,7 +78,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getDoubleArray(final long offsetBytes, final double[] dstArray,
       final int dstOffsetDoubles, final int lengthDoubles) {
     final long copyBytes = ((long) lengthDoubles) << DOUBLE_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetDoubles, lengthDoubles, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -91,7 +91,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public float getFloat(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     return unsafe.getFloat(getUnsafeObject(), 
getCumulativeOffset(offsetBytes));
   }
@@ -100,7 +100,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getFloatArray(final long offsetBytes, final float[] dstArray,
       final int dstOffsetFloats, final int lengthFloats) {
     final long copyBytes = ((long) lengthFloats) << FLOAT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetFloats, lengthFloats, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -120,7 +120,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getIntArray(final long offsetBytes, final int[] dstArray, final 
int dstOffsetInts,
       final int lengthInts) {
     final long copyBytes = ((long) lengthInts) << INT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetInts, lengthInts, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -140,7 +140,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getLongArray(final long offsetBytes, final long[] dstArray,
       final int dstOffsetLongs, final int lengthLongs) {
     final long copyBytes = ((long) lengthLongs) << LONG_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetLongs, lengthLongs, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -160,7 +160,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getShortArray(final long offsetBytes, final short[] dstArray,
       final int dstOffsetShorts, final int lengthShorts) {
     final long copyBytes = ((long) lengthShorts) << SHORT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkBounds(dstOffsetShorts, lengthShorts, dstArray.length);
     CompareAndCopy.copyMemoryCheckingDifferentObject(
@@ -181,7 +181,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putCharArray(final long offsetBytes, final char[] srcArray,
       final int srcOffsetChars, final int lengthChars) {
     final long copyBytes = ((long) lengthChars) << CHAR_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetChars, lengthChars, srcArray.length);
@@ -196,7 +196,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public void putDouble(final long offsetBytes, final double value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putDouble(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
@@ -206,7 +206,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putDoubleArray(final long offsetBytes, final double[] srcArray,
       final int srcOffsetDoubles, final int lengthDoubles) {
     final long copyBytes = ((long) lengthDoubles) << DOUBLE_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetDoubles, lengthDoubles, srcArray.length);
@@ -221,7 +221,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public void putFloat(final long offsetBytes, final float value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putFloat(getUnsafeObject(), getCumulativeOffset(offsetBytes), 
value);
@@ -231,7 +231,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putFloatArray(final long offsetBytes, final float[] srcArray,
       final int srcOffsetFloats, final int lengthFloats) {
     final long copyBytes = ((long) lengthFloats) << FLOAT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetFloats, lengthFloats, srcArray.length);
@@ -253,7 +253,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putIntArray(final long offsetBytes, final int[] srcArray, final 
int srcOffsetInts,
       final int lengthInts) {
     final long copyBytes = ((long) lengthInts) << INT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetInts, lengthInts, srcArray.length);
@@ -275,7 +275,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putLongArray(final long offsetBytes, final long[] srcArray, 
final int srcOffsetLongs,
       final int lengthLongs) {
     final long copyBytes = ((long) lengthLongs) << LONG_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetLongs, lengthLongs, srcArray.length);
@@ -297,7 +297,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putShortArray(final long offsetBytes, final short[] srcArray,
       final int srcOffsetShorts, final int lengthShorts) {
     final long copyBytes = ((long) lengthShorts) << SHORT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     checkBounds(srcOffsetShorts, lengthShorts, srcArray.length);
@@ -313,7 +313,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   //Atomic Write Methods
   @Override
   public long getAndAddLong(final long offsetBytes, final long delta) { //JDK 
8+
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     final long addr = getCumulativeOffset(offsetBytes);
@@ -322,7 +322,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public long getAndSetLong(final long offsetBytes, final long newValue) { 
//JDK 8+
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     final long addr = getCumulativeOffset(offsetBytes);
@@ -331,7 +331,7 @@ abstract class NativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public boolean compareAndSwapLong(final long offsetBytes, final long expect, 
final long update) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     return unsafe.compareAndSwapLong(
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
index fe8a04d..fd5b1c1 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImpl.java
@@ -69,7 +69,7 @@ abstract class NonNativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public double getDouble(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     return Double.longBitsToDouble(
         Long.reverseBytes(unsafe.getLong(getUnsafeObject(), 
getCumulativeOffset(offsetBytes))));
@@ -95,7 +95,7 @@ abstract class NonNativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public float getFloat(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     return Float.intBitsToFloat(
         Integer.reverseBytes(unsafe.getInt(getUnsafeObject(), 
getCumulativeOffset(offsetBytes))));
@@ -199,7 +199,7 @@ abstract class NonNativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public void putDouble(final long offsetBytes, final double value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putLong(getUnsafeObject(), getCumulativeOffset(offsetBytes),
@@ -226,7 +226,7 @@ abstract class NonNativeWritableBufferImpl extends 
BaseWritableBufferImpl {
 
   @Override
   public void putFloat(final long offsetBytes, final float value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putInt(getUnsafeObject(), getCumulativeOffset(offsetBytes),
diff --git 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
index 1d5cbda..7e15cbb 100644
--- 
a/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
+++ 
b/datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/NonNativeWritableMemoryImpl.java
@@ -50,7 +50,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getCharArray(final long offsetBytes, final char[] dstArray, 
final int dstOffsetChars,
       final int lengthChars) {
     final long copyBytes = ((long) lengthChars) << CHAR_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     CompareAndCopy.getNonNativeChars(getUnsafeObject(), 
getCumulativeOffset(offsetBytes),
         copyBytes, dstArray, dstOffsetChars, lengthChars);
@@ -58,7 +58,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public double getDouble(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     return Double.longBitsToDouble(
         Long.reverseBytes(unsafe.getLong(getUnsafeObject(), 
getCumulativeOffset(offsetBytes))));
@@ -68,7 +68,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getDoubleArray(final long offsetBytes, final double[] dstArray,
       final int dstOffsetDoubles, final int lengthDoubles) {
     final long copyBytes = ((long) lengthDoubles) << DOUBLE_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     CompareAndCopy.getNonNativeDoubles(getUnsafeObject(), 
getCumulativeOffset(offsetBytes),
         copyBytes, dstArray, dstOffsetDoubles, lengthDoubles);
@@ -76,7 +76,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public float getFloat(final long offsetBytes) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     return Float.intBitsToFloat(
         Integer.reverseBytes(unsafe.getInt(getUnsafeObject(), 
getCumulativeOffset(offsetBytes))));
@@ -86,7 +86,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getFloatArray(final long offsetBytes, final float[] dstArray,
       final int dstOffsetFloats, final int lengthFloats) {
     final long copyBytes = ((long) lengthFloats) << FLOAT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     CompareAndCopy.getNonNativeFloats(getUnsafeObject(), 
getCumulativeOffset(offsetBytes),
         copyBytes, dstArray, dstOffsetFloats, lengthFloats);
@@ -101,7 +101,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getIntArray(final long offsetBytes, final int[] dstArray, final 
int dstOffsetInts,
       final int lengthInts) {
     final long copyBytes = ((long) lengthInts) << INT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     CompareAndCopy.getNonNativeInts(getUnsafeObject(), 
getCumulativeOffset(offsetBytes), copyBytes,
         dstArray, dstOffsetInts, lengthInts);
@@ -116,7 +116,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getLongArray(final long offsetBytes, final long[] dstArray,
       final int dstOffsetLongs, final int lengthLongs) {
     final long copyBytes = ((long) lengthLongs) << LONG_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     CompareAndCopy.getNonNativeLongs(getUnsafeObject(), 
getCumulativeOffset(offsetBytes), copyBytes,
         dstArray, dstOffsetLongs, lengthLongs);
@@ -131,7 +131,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void getShortArray(final long offsetBytes, final short[] dstArray,
       final int dstOffsetShorts, final int lengthShorts) {
     final long copyBytes = ((long) lengthShorts) << SHORT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     CompareAndCopy.getNonNativeShorts(getUnsafeObject(), 
getCumulativeOffset(offsetBytes),
         copyBytes, dstArray, dstOffsetShorts, lengthShorts);
@@ -147,7 +147,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putCharArray(final long offsetBytes, final char[] srcArray, 
final int srcOffsetChars,
       final int lengthChars) {
     final long copyBytes = ((long) lengthChars) << CHAR_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     CompareAndCopy.putNonNativeChars(srcArray, srcOffsetChars, lengthChars, 
copyBytes,
@@ -156,7 +156,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public void putDouble(final long offsetBytes, final double value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_DOUBLE_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putLong(getUnsafeObject(), getCumulativeOffset(offsetBytes),
@@ -167,7 +167,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putDoubleArray(final long offsetBytes, final double[] srcArray,
       final int srcOffsetDoubles, final int lengthDoubles) {
     final long copyBytes = ((long) lengthDoubles) << DOUBLE_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     CompareAndCopy.putNonNativeDoubles(srcArray, srcOffsetDoubles, 
lengthDoubles, copyBytes,
@@ -176,7 +176,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public void putFloat(final long offsetBytes, final float value) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_FLOAT_INDEX_SCALE, capacityBytes_);
     checkWritable();
     unsafe.putInt(getUnsafeObject(), getCumulativeOffset(offsetBytes),
@@ -187,7 +187,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putFloatArray(final long offsetBytes, final float[] srcArray,
       final int srcOffsetFloats, final int lengthFloats) {
     final long copyBytes = ((long) lengthFloats) << FLOAT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     CompareAndCopy.putNonNativeFloats(srcArray, srcOffsetFloats, lengthFloats, 
copyBytes,
@@ -203,7 +203,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putIntArray(final long offsetBytes, final int[] srcArray, final 
int srcOffsetInts,
       final int lengthInts) {
     final long copyBytes = ((long) lengthInts) << INT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     CompareAndCopy.putNonNativeInts(srcArray, srcOffsetInts, lengthInts, 
copyBytes,
@@ -219,7 +219,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putLongArray(final long offsetBytes, final long[] srcArray, 
final int srcOffsetLongs,
       final int lengthLongs) {
     final long copyBytes = ((long) lengthLongs) << LONG_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     CompareAndCopy.putNonNativeLongs(srcArray, srcOffsetLongs, lengthLongs, 
copyBytes,
@@ -235,7 +235,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   public void putShortArray(final long offsetBytes, final short[] srcArray,
       final int srcOffsetShorts, final int lengthShorts) {
     final long copyBytes = ((long) lengthShorts) << SHORT_SHIFT;
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, copyBytes, capacityBytes_);
     checkWritable();
     CompareAndCopy.putNonNativeShorts(srcArray, srcOffsetShorts, lengthShorts, 
copyBytes,
@@ -245,7 +245,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
   //Atomic Write Methods
   @Override
   public long getAndAddLong(final long offsetBytes, final long delta) { //JDK 
8+
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     final long addr = getCumulativeOffset(offsetBytes);
@@ -262,7 +262,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public long getAndSetLong(final long offsetBytes, final long newValue) { 
//JDK 8+
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     final long addr = getCumulativeOffset(offsetBytes);
@@ -272,7 +272,7 @@ abstract class NonNativeWritableMemoryImpl extends 
BaseWritableMemoryImpl {
 
   @Override
   public boolean compareAndSwapLong(final long offsetBytes, final long expect, 
final long update) {
-    checkValid();
+    checkAlive();
     checkBounds(offsetBytes, ARRAY_LONG_INDEX_SCALE, capacityBytes_);
     checkWritable();
     return unsafe.compareAndSwapLong(getUnsafeObject(), 
getCumulativeOffset(offsetBytes),
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
index c5cb6d5..641dd5a 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMemoryTest.java
@@ -44,12 +44,12 @@ public class AllocateDirectMemoryTest {
         assertEquals(wMem.getLong(i << 3), i);
       }
       //inside the TWR block the memory should be valid
-      ((BaseStateImpl)wMem).checkValid();
+      ((BaseStateImpl)wMem).checkAlive();
       //OK
     }
     //The TWR block has exited, so the memory should be invalid
     try {
-      ((BaseStateImpl)wMem).checkValid();
+      ((BaseStateImpl)wMem).checkAlive();
       fail();
     } catch (final RuntimeException e) {
       //OK
@@ -66,7 +66,7 @@ public class AllocateDirectMemoryTest {
         origWmem.putLong(i << 3, i);
         assertEquals(origWmem.getLong(i << 3), i);
       }
-      println(origWmem.toHexString("Test", 0, 32 * 8));
+      println(origWmem.toHexString("Test", 0, 32 * 8, true));
 
       int longs2 = 64;
       int bytes2 = longs2 << 3;
@@ -77,7 +77,7 @@ public class AllocateDirectMemoryTest {
         memReqSvr = origWmem.getMemoryRequestServer();
       }
       WritableMemory newWmem = memReqSvr.request(origWmem, bytes2);
-      assertFalse(newWmem.isDirect()); //on heap by default
+      assertFalse(newWmem.isDirectResource()); //on heap by default
       for (int i = 0; i < longs2; i++) {
           newWmem.putLong(i << 3, i);
           assertEquals(newWmem.getLong(i << 3), i);
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java
index abf330a..f857210 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java
@@ -54,7 +54,7 @@ public class Buffer2Test {
       assertEquals(bb.get(), buffer.getByte());
     }
 
-    assertEquals(true, buffer.hasByteBuffer());
+    assertEquals(true, buffer.isByteBufferResource());
   }
 
   @Test
@@ -72,7 +72,7 @@ public class Buffer2Test {
     while (buffer.hasRemaining()) {
       assertEquals(bb.get(), buffer.getByte());
     }
-    assertEquals(true, buffer.hasByteBuffer());
+    assertEquals(true, buffer.isByteBufferResource());
   }
 
   @Test
@@ -94,7 +94,7 @@ public class Buffer2Test {
     buffer.getByteArray(copyByteArray, 0, 64);
     assertEquals(byteArray, copyByteArray);
 
-    assertEquals(false, buffer.hasByteBuffer());
+    assertEquals(false, buffer.isByteBufferResource());
   }
 
   @Test
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java
index 614b10a..2424119 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/BufferTest.java
@@ -222,8 +222,8 @@ public class BufferTest {
     for (int i = 0; i < 64; i++) {
       assertEquals(buf.getByte(), 64 + i);
     }
-    buf.toHexString("slice", 0, slice.capacity());
-    //println(s);
+    String s = buf.toHexString("slice", 0, slice.capacity(), true);
+    println(s);
   }
 
   @Test
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
index b48b8ca..17a951a 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/DruidIssue11544Test.java
@@ -61,7 +61,7 @@ public class DruidIssue11544Test {
 
     //Wrap bb into WritableMemory
     WritableMemory mem1 = WritableMemory.writableWrap(bb);
-    assertTrue(mem1.isDirect()); //confirm mem1 is off-heap
+    assertTrue(mem1.isDirectResource()); //confirm mem1 is off-heap
 
     //Acquire the DefaultMemoryRequestServer
     //NOTE: it is a policy decision to allow the DefaultMemoryServer to be set 
as a default.
@@ -77,7 +77,7 @@ public class DruidIssue11544Test {
     WritableMemory mem2 = svr.request(mem1, size2);
 
     //Confirm that mem2 is on the heap (the default) and 2X size1
-    assertFalse(mem2.isDirect());
+    assertFalse(mem2.isDirectResource());
     assertEquals(mem2.getCapacity(), size2);
 
     //Move data to new memory
@@ -94,7 +94,7 @@ public class DruidIssue11544Test {
     WritableMemory mem3 = svr.request(mem2, size3);
 
     //Confirm that mem3 is still on the heap and 2X of size2
-    assertFalse(mem3.isDirect());
+    assertFalse(mem3.isDirectResource());
     assertEquals(mem3.getCapacity(), size3);
 
     //Move data to new memory
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java
index 528bde9..2324672 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ExampleMemoryRequestServerTest.java
@@ -77,9 +77,7 @@ public class ExampleMemoryRequestServerTest {
   @Test(expectedExceptions = IllegalArgumentException.class)
   public void checkZeroCapacity() throws Exception {
     ExampleMemoryRequestServer svr = new ExampleMemoryRequestServer();
-    try (WritableHandle wh = WritableMemory.allocateDirect(0, 
NATIVE_BYTE_ORDER, svr)) {
-
-    }
+    try (WritableHandle wh = WritableMemory.allocateDirect(0, 
NATIVE_BYTE_ORDER, svr)) { }
   }
 
   /**
@@ -101,7 +99,7 @@ public class ExampleMemoryRequestServerTest {
     void process() {
       long cap1 = smallMem.getCapacity();
       smallMem.fill((byte) 1);                //fill it, but not big enough
-      println(smallMem.toHexString("Small", 0, (int)cap1));
+      println(smallMem.toHexString("Small", 0, (int)cap1, true));
 
       WritableMemory bigMem = svr.request(smallMem, 2 * cap1); //get bigger mem
       long cap2 = bigMem.getCapacity();
@@ -109,7 +107,7 @@ public class ExampleMemoryRequestServerTest {
       svr.requestClose(smallMem, bigMem);     //done with smallMem, release it
 
       bigMem.fill(cap1, cap1, (byte) 2);      //fill the rest of bigMem, still 
not big enough
-      println(bigMem.toHexString("Big", 0, (int)cap2));
+      println(bigMem.toHexString("Big", 0, (int)cap2, true));
 
       WritableMemory giantMem = svr.request(bigMem, 2 * cap2); //get giant mem
       long cap3 = giantMem.getCapacity();
@@ -117,7 +115,7 @@ public class ExampleMemoryRequestServerTest {
       svr.requestClose(bigMem, giantMem);     //done with bigMem, release it
 
       giantMem.fill(cap2, cap2, (byte) 3);    //fill the rest of giantMem
-      println(giantMem.toHexString("Giant", 0, (int)cap3));
+      println(giantMem.toHexString("Giant", 0, (int)cap3, true));
       svr.requestClose(giantMem, null);                 //done with giantMem, 
release it
     }
   }
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java
index 0defa50..71b184a 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/LeafImplTest.java
@@ -65,16 +65,16 @@ public class LeafImplTest {
       WritableMemory memNO = wdh.getWritable();
       memNO.putShort(0, (short) 1);
       assertNull(((BaseStateImpl)memNO).getUnsafeObject());
-      assertTrue(memNO.isDirect());
-      checkCombinations(memNO, off, cap, memNO.isDirect(), NATIVE_BYTE_ORDER, 
false, true);
+      assertTrue(memNO.isDirectResource());
+      checkCombinations(memNO, off, cap, memNO.isDirectResource(), 
NATIVE_BYTE_ORDER, false, true);
     }
     // Off Heap, Non Native order, No ByteBuffer, has MemReqSvr
     try (WritableHandle wdh = WritableMemory.allocateDirect(cap, 
NON_NATIVE_BYTE_ORDER, dummyMemReqSvr)) {
       WritableMemory memNNO = wdh.getWritable();
       memNNO.putShort(0, (short) 1);
       assertNull(((BaseStateImpl)memNNO).getUnsafeObject());
-      assertTrue(memNNO.isDirect());
-      checkCombinations(memNNO, off, cap, memNNO.isDirect(), 
NON_NATIVE_BYTE_ORDER, false, true);
+      assertTrue(memNNO.isDirectResource());
+      checkCombinations(memNNO, off, cap, memNNO.isDirectResource(), 
NON_NATIVE_BYTE_ORDER, false, true);
     }
   }
 
@@ -87,36 +87,36 @@ public class LeafImplTest {
     bb.order(NATIVE_BYTE_ORDER);
     bb.putShort(0, (short) 1);
     WritableMemory mem = WritableMemory.writableWrap(bb, NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
-    assertEquals(bb.isDirect(), mem.isDirect());
+    assertEquals(bb.isDirect(), mem.isDirectResource());
     assertNotNull(((BaseStateImpl)mem).getUnsafeObject());
-    checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, 
true);
+    checkCombinations(mem, off, cap, mem.isDirectResource(), 
mem.getByteOrder(), true, true);
 
     //BB off heap, native order, has ByteBuffer, has MemReqSvr
     ByteBuffer dbb = ByteBuffer.allocateDirect((int)cap);
     dbb.order(NATIVE_BYTE_ORDER);
     dbb.putShort(0, (short) 1);
     mem = WritableMemory.writableWrap(dbb, NATIVE_BYTE_ORDER, dummyMemReqSvr);
-    assertEquals(dbb.isDirect(), mem.isDirect());
+    assertEquals(dbb.isDirect(), mem.isDirectResource());
     assertNull(((BaseStateImpl)mem).getUnsafeObject());
-    checkCombinations(mem, off, cap,  mem.isDirect(), mem.getByteOrder(), 
true, true);
+    checkCombinations(mem, off, cap,  mem.isDirectResource(), 
mem.getByteOrder(), true, true);
 
     //BB on heap, non native order, has ByteBuffer, has MemReqSvr
     bb = ByteBuffer.allocate((int)cap);
     bb.order(NON_NATIVE_BYTE_ORDER);
     bb.putShort(0, (short) 1);
     mem = WritableMemory.writableWrap(bb, NON_NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
-    assertEquals(bb.isDirect(), mem.isDirect());
+    assertEquals(bb.isDirect(), mem.isDirectResource());
     assertNotNull(((BaseStateImpl)mem).getUnsafeObject());
-    checkCombinations(mem, off, cap, mem.isDirect(), mem.getByteOrder(), true, 
true);
+    checkCombinations(mem, off, cap, mem.isDirectResource(), 
mem.getByteOrder(), true, true);
 
     //BB off heap, non native order, has ByteBuffer, has MemReqSvr
     dbb = ByteBuffer.allocateDirect((int)cap);
     dbb.order(NON_NATIVE_BYTE_ORDER);
     dbb.putShort(0, (short) 1);
     mem = WritableMemory.writableWrap(dbb, NON_NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
-    assertEquals(dbb.isDirect(), mem.isDirect());
+    assertEquals(dbb.isDirect(), mem.isDirectResource());
     assertNull(((BaseStateImpl)mem).getUnsafeObject());
-    checkCombinations(mem, off, cap,  mem.isDirect(), mem.getByteOrder(), 
true, true);
+    checkCombinations(mem, off, cap,  mem.isDirectResource(), 
mem.getByteOrder(), true, true);
   }
 
   @Test
@@ -140,16 +140,16 @@ public class LeafImplTest {
       WritableMemory memNO = wmh.getWritable();
       memNO.putShort(0, (short) 1);
       assertNull(((BaseStateImpl)memNO).getUnsafeObject());
-      assertTrue(memNO.isDirect());
-      checkCombinations(memNO, off, cap, memNO.isDirect(), NATIVE_BYTE_ORDER, 
false, false);
+      assertTrue(memNO.isDirectResource());
+      checkCombinations(memNO, off, cap, memNO.isDirectResource(), 
NATIVE_BYTE_ORDER, false, false);
     }
     // Off heap, Non Native order, No ByteBuffer, no MemReqSvr
     try (WritableMapHandle wmh = WritableMemory.writableMap(file, off, cap, 
NON_NATIVE_BYTE_ORDER)) {
       WritableMemory memNNO = wmh.getWritable();
       memNNO.putShort(0, (short) 1);
       assertNull(((BaseStateImpl)memNNO).getUnsafeObject());
-      assertTrue(memNNO.isDirect());
-      checkCombinations(memNNO, off, cap, memNNO.isDirect(), 
NON_NATIVE_BYTE_ORDER, false, false);
+      assertTrue(memNNO.isDirectResource());
+      checkCombinations(memNNO, off, cap, memNNO.isDirectResource(), 
NON_NATIVE_BYTE_ORDER, false, false);
     }
   }
 
@@ -161,14 +161,14 @@ public class LeafImplTest {
     WritableMemory memNO = WritableMemory.allocate((int)cap); //assumes 
NATIVE_BYTE_ORDER
     memNO.putShort(0, (short) 1);
     assertNotNull(((BaseStateImpl)memNO).getUnsafeObject());
-    assertFalse(memNO.isDirect());
-    checkCombinations(memNO, off, cap, memNO.isDirect(), NATIVE_BYTE_ORDER, 
false, false);
+    assertFalse(memNO.isDirectResource());
+    checkCombinations(memNO, off, cap, memNO.isDirectResource(), 
NATIVE_BYTE_ORDER, false, false);
     // On Heap, Non-native order, No ByteBuffer, No MemReqSvr
     WritableMemory memNNO = WritableMemory.allocate((int)cap, 
NON_NATIVE_BYTE_ORDER);
     memNNO.putShort(0, (short) 1);
     assertNotNull(((BaseStateImpl)memNNO).getUnsafeObject());
-    assertFalse(memNNO.isDirect());
-    checkCombinations(memNNO, off, cap, memNNO.isDirect(), 
NON_NATIVE_BYTE_ORDER, false, false);
+    assertFalse(memNNO.isDirectResource());
+    checkCombinations(memNNO, off, cap, memNNO.isDirectResource(), 
NON_NATIVE_BYTE_ORDER, false, false);
   }
 
   private static void checkCombinations(WritableMemory mem, long off, long cap,
@@ -190,10 +190,10 @@ public class LeafImplTest {
 
     Object obj = ((BaseStateImpl)mem).getUnsafeObject();
     if (direct) {
-      assertTrue(mem.isDirect());
+      assertTrue(mem.isDirectResource());
       assertNull(obj);
     } else {
-      assertFalse(mem.isDirect());
+      assertFalse(mem.isDirectResource());
       assertNotNull(obj);
     }
 
@@ -215,10 +215,10 @@ public class LeafImplTest {
 
     obj = ((BaseStateImpl)buf).getUnsafeObject();
     if (direct) {
-      assertTrue(buf.isDirect());
+      assertTrue(buf.isDirectResource());
       assertNull(obj);
     } else {
-      assertFalse(buf.isDirect());
+      assertFalse(buf.isDirectResource());
       assertNotNull(obj);
     }
 
@@ -240,10 +240,10 @@ public class LeafImplTest {
 
     obj = ((BaseStateImpl)nnMem).getUnsafeObject();
     if (direct) {
-      assertTrue(nnMem.isDirect());
+      assertTrue(nnMem.isDirectResource());
       assertNull(obj);
     } else {
-      assertFalse(nnMem.isDirect());
+      assertFalse(nnMem.isDirectResource());
       assertNotNull(obj);
     }
 
@@ -265,14 +265,39 @@ public class LeafImplTest {
 
     obj = ((BaseStateImpl)nnBuf).getUnsafeObject();
     if (direct) {
-      assertTrue(nnBuf.isDirect());
+      assertTrue(nnBuf.isDirectResource());
       assertNull(obj);
     } else {
-      assertFalse(nnBuf.isDirect());
+      assertFalse(nnBuf.isDirectResource());
       assertNotNull(obj);
     }
 
     assertTrue(nnBuf.isAlive() == true);
   }
 
+  @Test
+  public void confirmByteBufferView() {
+    long le = 0X0807060504030201L;
+    long be = 0X0102030405060708L;
+    ByteBuffer bb = ByteBuffer.allocate(128);
+    bb.order(NATIVE_BYTE_ORDER);
+    bb.putLong(0, le);
+    WritableMemory mem = WritableMemory.writableWrap(bb, NATIVE_BYTE_ORDER, 
dummyMemReqSvr);
+    assertEquals(le,  mem.getLong(0)); //mem reads what BB put
+    mem.putLong(0, be);
+    assertEquals(be, bb.getLong(0)); //BB reads what mem put
+    //This confirms that mem and BB both have a R/W view of the same backing 
store
+
+    //Changing the byte order never changes what is already in the backing 
store
+    //It will change how bytes in the store are interpreted going in or coming 
out.
+    bb.order(NON_NATIVE_BYTE_ORDER);
+    assertEquals(le, bb.getLong(0)); //converts to LE on read;
+    assertEquals(be, mem.getLong(0)); //backing memory is still BE!
+
+    WritableMemory mem2 = WritableMemory.writableWrap(bb, 
NON_NATIVE_BYTE_ORDER, dummyMemReqSvr);
+    assertEquals(le, mem2.getLong(0)); //converts to LE on read;
+    mem2.putLong(0, le); //should put it as BE
+    assertEquals(le, mem2.getLong(0)); //converts to LE on read;
+  }
+
 }
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java
index 7504b62..147b31b 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java
@@ -225,8 +225,8 @@ public class MemoryTest {
     for (int i = 0; i < 64; i++) {
       assertEquals(mem.getByte(i), 64 + i);
     }
-    mem.toHexString("slice", 0, slice.capacity());
-    //println(s);
+    String s = mem.toHexString("slice", 0, slice.capacity(), true);
+    println(s);
   }
 
   @Test
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
index 7f5572f..d3c7e6d 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableBufferImplTest.java
@@ -76,7 +76,7 @@ public class NativeWritableBufferImplTest {
     for (int i=0; i<8; i++) {
       assertEquals(dstArray[i], srcArray[i]);
     }
-    assertFalse(buf.isDirect());
+    assertFalse(buf.isDirectResource());
   }
 
   @Test
@@ -211,7 +211,7 @@ public class NativeWritableBufferImplTest {
     try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
       WritableMemory wmem = wrh.getWritable();
       WritableBuffer wbuf = wmem.asWritableBuffer();
-      wbuf.toHexString("Force BoundsException", memCapacity, 8);
+      wbuf.toHexString("Force BoundsException", memCapacity, 8, true);
     } catch (BoundsException e) {
       //ok
     }
@@ -257,7 +257,7 @@ public class NativeWritableBufferImplTest {
       assertEquals(wbuf.getByte(), byteBuf.get(i));
     }
 
-    assertTrue(wbuf.hasByteBuffer());
+    assertTrue(wbuf.isByteBufferResource());
     ByteBuffer byteBuf2 = ((BaseStateImpl)wbuf).getByteBuffer();
     assertEquals(byteBuf2, byteBuf);
     //println( mem.toHexString("HeapBB", 0, memCapacity));
@@ -348,11 +348,11 @@ public class NativeWritableBufferImplTest {
   public void checkIsDirect() throws Exception {
     int memCapacity = 64;
     WritableBuffer mem = 
WritableMemory.allocate(memCapacity).asWritableBuffer();
-    assertFalse(mem.isDirect());
+    assertFalse(mem.isDirectResource());
     try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
       WritableMemory mem2 = wrh.getWritable();
       WritableBuffer wbuf = mem2.asWritableBuffer();
-      assertTrue(wbuf.isDirect());
+      assertTrue(wbuf.isDirectResource());
       wrh.close(); //immediate close
     }
   }
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
index 1ea90f6..ee61ce9 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/NativeWritableMemoryImplTest.java
@@ -74,7 +74,7 @@ public class NativeWritableMemoryImplTest {
     for (int i=0; i<8; i++) {
       assertEquals(dstArray[i], srcArray[i]);
     }
-    assertFalse(mem.isDirect());
+    assertFalse(mem.isDirectResource());
   }
 
   @Test
@@ -208,7 +208,7 @@ public class NativeWritableMemoryImplTest {
     int memCapacity = 64;
     try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
       WritableMemory mem = wrh.getWritable();
-      mem.toHexString("Force Bounds Error", memCapacity, 8);
+      mem.toHexString("Force Bounds Error", memCapacity, 8, true);
     } catch (BoundsException e) {
       //ok
     }
@@ -452,7 +452,7 @@ public class NativeWritableMemoryImplTest {
       assertEquals(wmem.getByte(i), byteBuf.get(i));
     }
 
-    assertTrue(wmem.hasByteBuffer());
+    assertTrue(wmem.isByteBufferResource());
     ByteBuffer byteBuf2 = ((BaseStateImpl)wmem).getByteBuffer();
     assertEquals(byteBuf2, byteBuf);
     //println( mem.toHexString("HeapBB", 0, memCapacity));
@@ -541,10 +541,10 @@ public class NativeWritableMemoryImplTest {
   public void checkIsDirect() throws Exception {
     int memCapacity = 64;
     WritableMemory mem = WritableMemory.allocate(memCapacity);
-    assertFalse(mem.isDirect());
+    assertFalse(mem.isDirectResource());
     try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
       mem = wrh.getWritable();
-      assertTrue(mem.isDirect());
+      assertTrue(mem.isDirectResource());
       wrh.close();
     }
   }
diff --git 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java
 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java
index 57c2e62..575ba81 100644
--- 
a/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java
+++ 
b/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/SpecificLeafTest.java
@@ -48,11 +48,11 @@ public class SpecificLeafTest {
     bb.order(NATIVE_BYTE_ORDER);
 
     Memory mem = Memory.wrap(bb).region(0, bytes, NATIVE_BYTE_ORDER);
-    assertTrue(((BaseStateImpl)mem).isByteBufferType());
+    assertTrue(((BaseStateImpl)mem).isByteBufferResource());
     assertTrue(mem.isReadOnly());
-    assertTrue(((BaseStateImpl)mem).isMemoryType());
-    assertFalse(((BaseStateImpl)mem).isDirectType());
-    assertFalse(((BaseStateImpl)mem).isMapType());
+    assertTrue(((BaseStateImpl)mem).isMemoryApi());
+    assertFalse(((BaseStateImpl)mem).isDirectResource());
+    assertFalse(((BaseStateImpl)mem).isMemoryMappedFileResource());
     checkCrossLeafTypeIds(mem);
     Buffer buf = mem.asBuffer().region(0, bytes, NATIVE_BYTE_ORDER);
     assertEquals(buf.getByteOrder(), NATIVE_BYTE_ORDER);
@@ -62,11 +62,11 @@ public class SpecificLeafTest {
     Buffer buf2 = mem2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
     Buffer buf3 = buf2.duplicate();
 
-    assertTrue(((BaseStateImpl)mem).isRegionType());
-    assertTrue(((BaseStateImpl)mem2).isRegionType());
-    assertTrue(((BaseStateImpl)buf).isRegionType());
-    assertTrue(((BaseStateImpl)buf2).isRegionType());
-    assertTrue(((BaseStateImpl)buf3).isDuplicateType());
+    assertTrue(((BaseStateImpl)mem).isRegionView());
+    assertTrue(((BaseStateImpl)mem2).isRegionView());
+    assertTrue(((BaseStateImpl)buf).isRegionView());
+    assertTrue(((BaseStateImpl)buf2).isRegionView());
+    assertTrue(((BaseStateImpl)buf3).isDuplicateBufferView());
   }
 
   @Test
@@ -74,7 +74,7 @@ public class SpecificLeafTest {
     int bytes = 128;
     try (WritableHandle h = WritableMemory.allocateDirect(bytes)) {
       WritableMemory wmem = h.getWritable(); //native mem
-      assertTrue(((BaseStateImpl)wmem).isDirectType());
+      assertTrue(((BaseStateImpl)wmem).isDirectResource());
       assertFalse(wmem.isReadOnly());
       checkCrossLeafTypeIds(wmem);
       WritableMemory nnwmem = wmem.writableRegion(0, bytes, 
NON_NATIVE_BYTE_ORDER);
@@ -87,12 +87,12 @@ public class SpecificLeafTest {
       Buffer buf2 = mem2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
       Buffer buf3 = buf2.duplicate();
 
-      assertTrue(((BaseStateImpl)mem).isRegionType());
-      assertTrue(((BaseStateImpl)mem2).isRegionType());
-      assertTrue(((BaseStateImpl)buf).isRegionType());
-      assertTrue(((BaseStateImpl)buf2).isRegionType());
-      assertTrue(((BaseStateImpl)buf3).isDuplicateType());
-      assertTrue(((BaseStateImpl)mem).isMemoryType());
+      assertTrue(((BaseStateImpl)mem).isRegionView());
+      assertTrue(((BaseStateImpl)mem2).isRegionView());
+      assertTrue(((BaseStateImpl)buf).isRegionView());
+      assertTrue(((BaseStateImpl)buf2).isRegionView());
+      assertTrue(((BaseStateImpl)buf3).isDuplicateBufferView());
+      assertTrue(((BaseStateImpl)mem).isMemoryApi());
     }
   }
 
@@ -115,7 +115,7 @@ public class SpecificLeafTest {
 
     try (WritableMapHandle h = WritableMemory.writableMap(file, 0L, bytes, 
NATIVE_BYTE_ORDER)) {
       WritableMemory mem = h.getWritable(); //native mem
-      assertTrue(((BaseStateImpl)mem).isMapType());
+      assertTrue(((BaseStateImpl)mem).isMemoryMappedFileResource());
       assertFalse(mem.isReadOnly());
       checkCrossLeafTypeIds(mem);
       Memory nnreg = mem.region(0, bytes, NON_NATIVE_BYTE_ORDER);
@@ -128,12 +128,12 @@ public class SpecificLeafTest {
       Buffer buf2 = reg2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
       Buffer buf3 = buf2.duplicate();
 
-      assertTrue(((BaseStateImpl)reg).isRegionType());
-      assertTrue(((BaseStateImpl)reg2).isRegionType());
-      assertTrue(((BaseStateImpl)buf).isRegionType());
-      assertTrue(((BaseStateImpl)buf2).isRegionType());
-      assertTrue(((BaseStateImpl)buf3).isDuplicateType());
-      assertTrue(((BaseStateImpl)buf4).isDuplicateType());
+      assertTrue(((BaseStateImpl)reg).isRegionView());
+      assertTrue(((BaseStateImpl)reg2).isRegionView());
+      assertTrue(((BaseStateImpl)buf).isRegionView());
+      assertTrue(((BaseStateImpl)buf2).isRegionView());
+      assertTrue(((BaseStateImpl)buf3).isDuplicateBufferView());
+      assertTrue(((BaseStateImpl)buf4).isDuplicateBufferView());
     }
   }
 
@@ -141,8 +141,8 @@ public class SpecificLeafTest {
   public void checkHeapLeafs() {
     int bytes = 128;
     Memory mem = Memory.wrap(new byte[bytes]);
-    assertTrue(((BaseStateImpl)mem).isHeapType());
-    assertTrue(((BaseStateImpl)mem).isReadOnlyType());
+    assertFalse(((BaseStateImpl)mem).isDirectResource());
+    assertTrue(((BaseStateImpl)mem).isReadOnly());
     checkCrossLeafTypeIds(mem);
     Memory nnreg = mem.region(0, bytes, NON_NATIVE_BYTE_ORDER);
 
@@ -154,47 +154,47 @@ public class SpecificLeafTest {
     Buffer buf2 = reg2.asBuffer().region(0, bytes, NON_NATIVE_BYTE_ORDER);
     Buffer buf3 = buf2.duplicate();
 
-    assertFalse(((BaseStateImpl)mem).isRegionType());
-    assertTrue(((BaseStateImpl)reg2).isRegionType());
-    assertTrue(((BaseStateImpl)buf).isRegionType());
-    assertTrue(((BaseStateImpl)buf2).isRegionType());
-    assertTrue(((BaseStateImpl)buf3).isDuplicateType());
-    assertTrue(((BaseStateImpl)buf4).isDuplicateType());
+    assertFalse(((BaseStateImpl)mem).isRegionView());
+    assertTrue(((BaseStateImpl)reg2).isRegionView());
+    assertTrue(((BaseStateImpl)buf).isRegionView());
+    assertTrue(((BaseStateImpl)buf2).isRegionView());
+    assertTrue(((BaseStateImpl)buf3).isDuplicateBufferView());
+    assertTrue(((BaseStateImpl)buf4).isDuplicateBufferView());
   }
 
   private static void checkCrossLeafTypeIds(Memory mem) {
     Memory reg1 = mem.region(0, mem.getCapacity());
-    assertTrue(((BaseStateImpl)reg1).isRegionType());
+    assertTrue(((BaseStateImpl)reg1).isRegionView());
 
     Buffer buf1 = reg1.asBuffer();
-    assertTrue(((BaseStateImpl)buf1).isRegionType());
-    assertTrue(((BaseStateImpl)buf1).isBufferType());
+    assertTrue(((BaseStateImpl)buf1).isRegionView());
+    assertFalse(((BaseStateImpl)buf1).isMemoryApi());
     assertTrue(buf1.isReadOnly());
 
     Buffer buf2 = buf1.duplicate();
-    assertTrue(((BaseStateImpl)buf2).isRegionType());
-    assertTrue(((BaseStateImpl)buf2).isBufferType());
-    assertTrue(((BaseStateImpl)buf2).isDuplicateType());
+    assertTrue(((BaseStateImpl)buf2).isRegionView());
+    assertFalse(((BaseStateImpl)buf1).isMemoryApi());
+    assertTrue(((BaseStateImpl)buf2).isDuplicateBufferView());
     assertTrue(buf2.isReadOnly());
 
     Memory mem2 = buf1.asMemory(); //
-    assertTrue(((BaseStateImpl)mem2).isRegionType());
-    assertFalse(((BaseStateImpl)mem2).isBufferType());
-    assertFalse(((BaseStateImpl)mem2).isDuplicateType());
+    assertTrue(((BaseStateImpl)mem2).isRegionView());
+    assertFalse(((BaseStateImpl)buf1).isMemoryApi());
+    assertFalse(((BaseStateImpl)mem2).isDuplicateBufferView());
     assertTrue(mem2.isReadOnly());
 
     Buffer buf3 = buf1.duplicate(NON_NATIVE_BYTE_ORDER);
-    assertTrue(((BaseStateImpl)buf3).isRegionType());
-    assertTrue(((BaseStateImpl)buf3).isBufferType());
-    assertTrue(((BaseStateImpl)buf3).isDuplicateType());
-    assertTrue(((BaseStateImpl)buf3).isNonNativeType());
+    assertTrue(((BaseStateImpl)buf3).isRegionView());
+    assertFalse(((BaseStateImpl)buf1).isMemoryApi());
+    assertTrue(((BaseStateImpl)buf3).isDuplicateBufferView());
+    assertTrue(((BaseStateImpl)buf3).isNonNativeOrder());
     assertTrue(buf3.isReadOnly());
 
     Memory mem3 = buf3.asMemory();
-    assertTrue(((BaseStateImpl)mem3).isRegionType());
-    assertFalse(((BaseStateImpl)mem3).isBufferType());
-    assertTrue(((BaseStateImpl)mem3).isDuplicateType());
-    assertTrue(((BaseStateImpl)mem3).isNonNativeType());
+    assertTrue(((BaseStateImpl)mem3).isRegionView());
+    assertTrue(((BaseStateImpl)mem3).isMemoryApi());
+    assertTrue(((BaseStateImpl)mem3).isDuplicateBufferView());
+    assertTrue(((BaseStateImpl)mem3).isNonNativeOrder());
     assertTrue(mem3.isReadOnly());
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to