public ImageInputStream createInputStreamInstance(Object pInput, boolean pUseCache, File pCacheDir) throws IOException { if (pInput instanceof byte[]) { return new ByteArrayImageInputStream((byte[]) pInput); } else { throw new IllegalArgumentException("Expected input of type byte[]: " + pInput); } }
IIOMetadata readMetadata() throws IOException { ImageInputStream input = new ByteArrayImageInputStream(segment.thumbnail); try { reader.setInput(input); return reader.getImageMetadata(0); } finally { input.close(); } }
@Override Directory parseDirectory() throws IOException { // The data is in essence an embedded TIFF file. return new TIFFReader().read(new ByteArrayImageInputStream(data)); }
Directory parseDirectory() throws IOException { // Chop off potential trailing null-termination/padding that SAX parsers don't like... int len = data.length; for (; len > 0; len--) { if (data[len - 1] != 0) { break; } } return new XMPReader().read(new ByteArrayImageInputStream(data, 0, len)); } }
@Test public void testCreateBadLen() { try { new ByteArrayImageInputStream(new byte[1], 0, 2); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertNotNull("Null exception message", expected.getMessage()); String message = expected.getMessage().toLowerCase(); assertTrue("Exception message does not contain parameter name", message.contains("length")); assertTrue("Exception message does not contain ™", message.contains("2")); } }
@Test(timeout = 5000) public void canDecodeInputInvalid() throws Exception { for (String invalidInput : INVALID_INPUTS) { try (ImageInputStream input = new ByteArrayImageInputStream(invalidInput.getBytes(StandardCharsets.UTF_8))) { assertFalse("Claims to read invalid input:" + invalidInput, provider.canDecodeInput(input)); } } } }
@Test public void testReadOffsetLen() throws IOException { byte[] data = new byte[1024 * 1024]; random.nextBytes(data); int offset = random.nextInt(data.length / 10); int length = random.nextInt(data.length - offset); ByteArrayImageInputStream stream = new ByteArrayImageInputStream(data, offset, length); assertEquals("Data length should be same as stream length", length, stream.length()); for (int i = offset; i < offset + length; i++) { assertEquals("Wrong data read", data[i] & 0xff, stream.read()); } }
@Test public void testCreate() { ByteArrayImageInputStream stream = new ByteArrayImageInputStream(new byte[0]); assertEquals("Data length should be same as stream length", 0, stream.length()); }
@Test public void testDataV1OverpaintedArc() throws IOException, InterruptedException { // TODO: Doesn't look right PICTImageReader reader = createReader(); reader.setInput(new ByteArrayImageInputStream(DATA_V1_OVERPAINTED_ARC)); reader.read(0); BufferedImage image = reader.read(0); if (!GraphicsEnvironment.isHeadless()) { PICTImageReader.showIt(image, "dataV1CopyBits"); Thread.sleep(10000); } }
@Test public void testRead() throws IOException { byte[] data = new byte[1024 * 1024]; random.nextBytes(data); ByteArrayImageInputStream stream = new ByteArrayImageInputStream(data); assertEquals("Data length should be same as stream length", data.length, stream.length()); for (byte b : data) { assertEquals("Wrong data read", b & 0xff, stream.read()); } }
@Test public void testDataV1() throws IOException, InterruptedException { PICTImageReader reader = createReader(); reader.setInput(new ByteArrayImageInputStream(DATA_V1)); reader.read(0); }
@Test public void testDataV1CopyBits() throws IOException, InterruptedException { PICTImageReader reader = createReader(); reader.setInput(new ByteArrayImageInputStream(DATA_V1_COPY_BITS)); reader.read(0); }
@Test public void testDataExtV2() throws IOException, InterruptedException { PICTImageReader reader = createReader(); reader.setInput(new ByteArrayImageInputStream(DATA_EXT_V2)); reader.read(0); }
@Test public void testDataV2() throws IOException, InterruptedException { PICTImageReader reader = createReader(); reader.setInput(new ByteArrayImageInputStream(DATA_V2)); reader.read(0); }
@Test public void testDataV1OvalRect() throws IOException, InterruptedException { PICTImageReader reader = createReader(); reader.setInput(new ByteArrayImageInputStream(DATA_V1_OVAL_RECT)); reader.read(0); }
@Test public void testReadArray() throws IOException { byte[] data = new byte[1024 * 1024]; random.nextBytes(data); ByteArrayImageInputStream stream = new ByteArrayImageInputStream(data); assertEquals("Data length should be same as stream length", data.length, stream.length()); byte[] result = new byte[1024]; for (int i = 0; i < data.length / result.length; i++) { stream.readFully(result); assertTrue("Wrong data read: " + i, rangeEquals(data, i * result.length, result, 0, result.length)); } }
@Test public void testTranscodeWithMetadataRGBtoRGB() throws IOException { ImageWriter writer = createImageWriter(); ImageReader reader = ImageIO.getImageReader(writer); ByteArrayOutputStream stream = transcode(reader, getClassLoaderResource("/jpeg/jfif-jfxx-thumbnail-olympus-d320l.jpg"), writer, ColorSpace.TYPE_RGB); // TODO: Validate that correct warnings are emitted (if any are needed?) reader.reset(); reader.setInput(new ByteArrayImageInputStream(stream.toByteArray())); BufferedImage image = reader.read(0); assertNotNull(image); }
@Test public void testReadWriteRead() throws IOException { Directory original = createReader().read(getDataAsIIS()); ByteArrayOutputStream output = new FastByteArrayOutputStream(256); try (ImageOutputStream imageOutput = ImageIO.createImageOutputStream(output)) { createWriter().write(original, imageOutput); } Directory read = createReader().read(new ByteArrayImageInputStream(output.toByteArray())); assertEquals(original, read); } }
@Test public void testRewriteExisting() throws IOException { IPTCReader reader = createReader(); Directory iptc = reader.read(getDataAsIIS()); assumeNotNull(iptc); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); MemoryCacheImageOutputStream stream = new MemoryCacheImageOutputStream(bytes); createWriter().write(iptc, stream); stream.close(); Directory written = reader.read(new ByteArrayImageInputStream(bytes.toByteArray())); assertEquals(iptc, written); }
@Test public void testProviderShouldNotConsumeExistingMarks() throws IOException { try (ImageInputStream stream = new ByteArrayImageInputStream(new byte[1024])) { stream.seek(42); stream.mark(); stream.seek(123); sProvider.canDecodeInput(stream); assertEquals(123, stream.getStreamPosition()); stream.reset(); assertEquals(42, stream.getStreamPosition()); } }