ReadOnlyFilteredCOSStream extends COSStream { @Override public IndirectCOSObjectIdentifier id() { return wrapped.id(); } ReadOnlyFilteredCOSStream(COSDictionary existingDictionary, InputStream stream, long length);  ReadOnlyFilteredCOSStream(COSDictionary existingDictionary, InputStreamSupplier<InputStream> stream,
            long length); @Override long getFilteredLength(); @Override long getUnfilteredLength(); @Override InputStream getUnfilteredStream(); @Override SeekableSource getUnfilteredSource(); @Override OutputStream createFilteredStream(); @Override OutputStream createFilteredStream(COSBase filters); @Override void setFilters(COSBase filters); @Override boolean addCompression(); @Override boolean encryptable(); @Override void encryptable(boolean encryptable); @Override OutputStream createUnfilteredStream(); @Override boolean isEmpty(); @Override boolean indirectLength(); @Override void indirectLength(boolean indirectLength); @Override IndirectCOSObjectIdentifier id(); @Override void idIfAbsent(IndirectCOSObjectIdentifier id); @Override void close(); static ReadOnlyFilteredCOSStream readOnly(COSStream existing); static ReadOnlyFilteredCOSStream readOnlyJpegImage(File imageFile, int width, int height,
            int bitsPerComponent, PDColorSpace colorSpace); static final ReadOnlyFilteredCOSStream readOnlyEmbeddedFile(Source<?> source);  }
@Test public void testId() { IndirectCOSObjectIdentifier id = new IndirectCOSObjectIdentifier(new COSObjectKey(10, 0), "source"); dictionary.idIfAbsent(id); victim = new ReadOnlyFilteredCOSStream(dictionary, stream, 10); assertTrue(victim.hasId()); assertEquals(id, victim.id()); }