[ https://issues.apache.org/jira/browse/CODEC-130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13231575#comment-13231575 ]
Thomas Neidhart edited comment on CODEC-130 at 3/16/12 8:26 PM: ---------------------------------------------------------------- Imho the request for change has some merit. When looking at the InflaterInputStream (which is also a derived FilterInputStream), the skip method is implemented to skip uncompressed bytes rather than compressed ones (aka from the underlying stream): {noformat} Skips specified number of bytes of uncompressed data. {noformat} was (Author: tn): Imho the request for change has some merit. If looking at the InflaterInputStream (which is also a derived FilterInputStream), the skip method is implemented to skip uncompressed bytes: {noformat} Skips specified number of bytes of uncompressed data. {noformat} > Base64InputStream.skip skips underlying stream, not output > ---------------------------------------------------------- > > Key: CODEC-130 > URL: https://issues.apache.org/jira/browse/CODEC-130 > Project: Commons Codec > Issue Type: Bug > Affects Versions: 1.5 > Reporter: James Pickering > Priority: Minor > Attachments: base64snippet.java > > > Base64InputStream.skip() skips within underlying stream, leading to > unexpected behaviour. > The following code will reproduce the issue: > @Test > public void testSkip() throws Throwable { > InputStream ins = > new > ByteArrayInputStream("AAAA////".getBytes("ISO-8859-1"));//should decode to > {0, 0, 0, 255, 255, 255} > Base64InputStream instance = new Base64InputStream(ins); > assertEquals(3L, instance.skip(3L)); //should skip 3 decoded characters, > or 4 encoded characters > assertEquals(255, instance.read()); //Currently returns 3, as it is > decoding "A/", not "//" > } > The following code, if added to Base64InputStream, or (BaseNCodecInputStream > in the dev build) would resolve the issue: > @Override > public long skip(long n) throws IOException { > //delegate to read() > long bytesRead = 0; > while ((bytesRead < n) && (read() != -1)) { > bytesRead++; > } > return bytesRead; > } > More efficient code may be possible. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira