diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index cd397bc6..77cd65fd 100755 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -1071,9 +1071,7 @@ public class TIFFImageReader extends ImageReaderBase { break; // We're done with this tile } - for (int k = 0; k < rowDataShort.length; k++) { - rowDataShort[k] = input.readShort(); - } + readFully(input, rowDataShort); if (row >= srcRegion.y) { normalizeBlack(interpretation, rowDataShort); @@ -1101,9 +1099,7 @@ public class TIFFImageReader extends ImageReaderBase { break; // We're done with this tile } - for (int k = 0; k < rowDataInt.length; k++) { - rowDataInt[k] = input.readInt(); - } + readFully(input, rowDataInt); if (row >= srcRegion.y) { normalizeBlack(interpretation, rowDataInt); @@ -1126,6 +1122,32 @@ public class TIFFImageReader extends ImageReaderBase { } } + // TODO: Candidate util method (with off/len + possibly byte order) + private void readFully(final DataInput input, final int[] rowDataInt) throws IOException { + if (input instanceof ImageInputStream) { + ImageInputStream imageInputStream = (ImageInputStream) input; + imageInputStream.readFully(rowDataInt, 0, rowDataInt.length); + } + else { + for (int k = 0; k < rowDataInt.length; k++) { + rowDataInt[k] = input.readInt(); + } + } + } + + // TODO: Candidate util method (with off/len + possibly byte order) + private void readFully(final DataInput input, final short[] rowDataShort) throws IOException { + if (input instanceof ImageInputStream) { + ImageInputStream imageInputStream = (ImageInputStream) input; + imageInputStream.readFully(rowDataShort, 0, rowDataShort.length); + } + else { + for (int k = 0; k < rowDataShort.length; k++) { + rowDataShort[k] = input.readShort(); + } + } + } + private void normalizeBlack(int photometricInterpretation, short[] data) { if (photometricInterpretation == TIFFBaseline.PHOTOMETRIC_WHITE_IS_ZERO) { // Inverse values