[ https://issues.apache.org/jira/browse/VFS-218?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mario Ivankovits resolved VFS-218. ---------------------------------- Resolution: Invalid Hi! ... and so does this code snippet {code} FileInputStream fis = new FileInputStream("C:/temp/bla.txt"); long skipped = fis.skip(9L); System.out.println(skipped+" <= prints 9, this should be 6 as per javadoc's specification; "+ "http://java.sun.com/j2se/1.5.0/docs/api/java/io/InputStream.html#skip(long)"); {code} And this is due to a bug/feature in java [1] which has already been added to the documentation of FileInputStream [2]. Clearly, FileInputStream breaks the contract of its interface. Seems like you are out of luck. Ciao, Mario [1] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6294974 [2] http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html > .skip() always returns the same number as given as parameter while the stream > itself may or may not skip to given position > -------------------------------------------------------------------------------------------------------------------------- > > Key: VFS-218 > URL: https://issues.apache.org/jira/browse/VFS-218 > Project: Commons VFS > Issue Type: Bug > Affects Versions: 1.0 > Environment: Java 5, using jdk1.6.0_06 on Windows XP SP3 > Reporter: Not Telling > > The code below should reproduce the bug, so far I've tested this with file: > and res: file systems and at least those two expose this bug. As you may > notice from the source, you should have file called "bla.txt" containing > "blabla" (6 characters) in your C:\temp\ folder for this. > {code:title=VFSStreamSkipping.java} > import java.io.IOException; > import java.io.InputStream; > import org.apache.commons.vfs.FileObject; > import org.apache.commons.vfs.FileSystemException; > import org.apache.commons.vfs.FileSystemManager; > import org.apache.commons.vfs.VFS; > /** > * This class demonstrates buggy behaviour of .skip() when using VFS. > * The bug is that no matter how many bytes were actually skipped, .skip() > * always returns the same number as the user tried to skip. The stream itself > * may get skipped though, if one tries to read the stream in this example > * after .skip(), it will return -1 indicating that .skip() was executed > * properly. > */ > public class VFSStreamSkipping { > > public static void main(String[] args) { > FileObject file; > FileSystemManager fsm; > try { > fsm = VFS.getManager(); > } catch (FileSystemException e) { > fsm = null; > } > > InputStream is = null; > > try { > file = fsm.resolveFile("file:C:/temp/bla.txt"); > // file content is simply "blabla" with no \n or \r > is = file.getContent().getInputStream(); > } catch (FileSystemException e) {} > > try { > long skipped = is.skip(9L); > System.out.println(skipped+" <= prints 9, this should > be 6 as per javadoc's specification; "+ > > "http://java.sun.com/j2se/1.5.0/docs/api/java/io/InputStream.html#skip(long)"); > > System.out.println(is.read()); > } catch (IOException e) {} > } > } > {code} -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.