Skip to content

Commit ac431a4

Browse files
committed
refactor v2 code
1 parent c78f371 commit ac431a4

1 file changed

Lines changed: 17 additions & 32 deletions

File tree

src/main/java/org/hdf5javalib/hdffile/dataobjects/messages/AttributeMessage.java

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -99,26 +99,28 @@ public static HdfMessage parseHeaderMessage(int messageFlags, byte[] data, HdfDa
9999
// Read the version (1 byte)
100100
int version = Byte.toUnsignedInt(buffer.get());
101101

102-
int nameSize;
103-
int datatypeSize;
104-
int dataspaceSize;
105-
HdfString name;
102+
// Version 1 requires 8-byte padding between fields.
103+
buffer.get(); // Skip reserved byte
104+
int nameSize = Short.toUnsignedInt(buffer.getShort());
105+
int datatypeSize = Short.toUnsignedInt(buffer.getShort());
106+
int dataspaceSize = Short.toUnsignedInt(buffer.getShort());
107+
108+
// Versions 2 & 3 have NO PADDING between fields.
109+
StringDatatype.CharacterSet characterSet = StringDatatype.CharacterSet.ASCII;
110+
if (version == 3) {
111+
byte charSetByte = buffer.get();
112+
characterSet = (charSetByte == 0) ? StringDatatype.CharacterSet.ASCII : StringDatatype.CharacterSet.UTF8;
113+
}
114+
115+
byte[] nameBytes = new byte[nameSize];
116+
buffer.get(nameBytes);
117+
BitSet bitSet = StringDatatype.createClassBitField(StringDatatype.PaddingType.NULL_TERMINATE, characterSet);
118+
HdfString name = new HdfString(nameBytes, new StringDatatype(StringDatatype.createClassAndVersion(), bitSet, nameSize, hdfDataFile));
106119

107120
byte[] dtBytes;
108121
byte[] dsBytes;
109122

110123
if (version == 1) {
111-
// Version 1 requires 8-byte padding between fields.
112-
buffer.get(); // Skip reserved byte
113-
nameSize = Short.toUnsignedInt(buffer.getShort());
114-
datatypeSize = Short.toUnsignedInt(buffer.getShort());
115-
dataspaceSize = Short.toUnsignedInt(buffer.getShort());
116-
117-
byte[] nameBytes = new byte[nameSize];
118-
buffer.get(nameBytes);
119-
BitSet bitSet = StringDatatype.createClassBitField(StringDatatype.PaddingType.NULL_TERMINATE, StringDatatype.CharacterSet.ASCII);
120-
name = new HdfString(nameBytes, new StringDatatype(StringDatatype.createClassAndVersion(), bitSet, nameSize, hdfDataFile));
121-
122124
// Apply 8-byte alignment padding after the name
123125
buffer.position((buffer.position() + 7) & ~7);
124126

@@ -133,23 +135,6 @@ public static HdfMessage parseHeaderMessage(int messageFlags, byte[] data, HdfDa
133135
buffer.position((buffer.position() + 7) & ~7);
134136

135137
} else if (version == 2 || version == 3) {
136-
// Versions 2 & 3 have NO PADDING between fields.
137-
buffer.get(); // Read flags (for v3) or reserved byte (for v2)
138-
nameSize = Short.toUnsignedInt(buffer.getShort());
139-
datatypeSize = Short.toUnsignedInt(buffer.getShort());
140-
dataspaceSize = Short.toUnsignedInt(buffer.getShort());
141-
142-
StringDatatype.CharacterSet characterSet = StringDatatype.CharacterSet.ASCII;
143-
if (version == 3) {
144-
byte charSetByte = buffer.get();
145-
characterSet = (charSetByte == 0) ? StringDatatype.CharacterSet.ASCII : StringDatatype.CharacterSet.UTF8;
146-
}
147-
148-
byte[] nameBytes = new byte[nameSize];
149-
buffer.get(nameBytes);
150-
BitSet bitSet = StringDatatype.createClassBitField(StringDatatype.PaddingType.NULL_TERMINATE, characterSet);
151-
name = new HdfString(nameBytes, new StringDatatype(StringDatatype.createClassAndVersion(), bitSet, nameSize, hdfDataFile));
152-
153138
// Read fields sequentially with no padding
154139
dtBytes = new byte[datatypeSize];
155140
buffer.get(dtBytes);

0 commit comments

Comments
 (0)