From e4a694c9029d67741b5003049dbcd9e1a54e5078 Mon Sep 17 00:00:00 2001 From: James Mudd Date: Thu, 19 Dec 2019 19:59:44 +0000 Subject: [PATCH] Fix #139 reading string datasets from chunked v4 files no longer fails --- .../java/io/jhdf/dataset/VariableLengthDatasetReader.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jhdf/src/main/java/io/jhdf/dataset/VariableLengthDatasetReader.java b/jhdf/src/main/java/io/jhdf/dataset/VariableLengthDatasetReader.java index cfa5e825..fbe1e4bd 100644 --- a/jhdf/src/main/java/io/jhdf/dataset/VariableLengthDatasetReader.java +++ b/jhdf/src/main/java/io/jhdf/dataset/VariableLengthDatasetReader.java @@ -16,6 +16,7 @@ import java.lang.reflect.Array; import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; @@ -25,6 +26,8 @@ import java.util.Map; import java.util.stream.IntStream; +import static java.nio.ByteOrder.LITTLE_ENDIAN; + public final class VariableLengthDatasetReader { /** No instances */ @@ -96,6 +99,9 @@ private static List getGlobalHeapIds(ByteBuffer bb, int length, Hd final int skipBytes = length - hdfFc.getSizeOfOffsets() - 4; // id=4 + // Assume all global heap buffers are little endian + bb.order(LITTLE_ENDIAN); + while (bb.remaining() >= length) { // Move past the skipped bytes. TODO figure out what this is for bb.position(bb.position() + skipBytes);