@@ -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