[ https://issues.apache.org/jira/browse/CODEC-130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13232035#comment-13232035 ]
Thomas Neidhart commented on CODEC-130: --------------------------------------- I have added a unit test to demonstrate the wrong behaviour in an understandable way. First, I encode a string "Hello World!" using the Base64outputstream. The encoded string is then read back with a Base64InputStream, but first I do a skip(1) on the stream. Which results in total rubbish instead of the expected "ello World!". btw. when using an InputStreamReader, the problem is non-existent, as the InputStreamReader implements the skip properly by calling the read method of the underlying stream. > 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