When a double variable has multiple filters like Deflate, Shuffle, and Checksum, the Checksum was throwing an "invalid checksum" error on reading. This was because the Shuffle algorithm had a condition that it wasn't applied unless the chunk of data had a size that was a multiple of the element size. This condition was false for the case of 8 byte doubles with a checksum, which is represented as 4 bytes at the end of the chunk.
This PR allows the Shuffle encoding and decoding to apply to chunks of any size, and ensures the leftover bytes that aren't affected by the shuffle remain the same. This is in line with the netcdf-c library behavior.
Description of Changes
Should fix https://github.com/Unidata/netcdf-java/issues/1199.
When a double variable has multiple filters like Deflate, Shuffle, and Checksum, the Checksum was throwing an "invalid checksum" error on reading. This was because the Shuffle algorithm had a condition that it wasn't applied unless the chunk of data had a size that was a multiple of the element size. This condition was false for the case of 8 byte doubles with a checksum, which is represented as 4 bytes at the end of the chunk.
This PR allows the Shuffle encoding and decoding to apply to chunks of any size, and ensures the leftover bytes that aren't affected by the shuffle remain the same. This is in line with the netcdf-c library behavior.