[ 
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.

Reply via email to