Behavior of java.io.FileOutputStream.getChannel() does not match the spec
Alan Bateman
Alan.Bateman at oracle.com
Thu Feb 17 09:34:31 UTC 2011
Sean Chou wrote:
> Hi,
> I find there is a mismatch between the spec and the behavior of
> java.io.FileOutputStream.getChannel().
>
> The spec reads: "The initial position of the returned channel will be
> equal to the number of bytes written to the file so far unless this
> stream is in append mode, in which case it will be equal to the size
> of the file. "
>
> But we'll get size 0 in such situation. Here is the testcase:
>
> //Testcase
> import java.io.*;
>
> public class FileOutputStreamTest{
> public static void main(String args[]) throws Exception{
> File tmpfile = File.createTempFile("FileOutputStream", "tmp");
> tmpfile.deleteOnExit();
> FileOutputStream fos = new FileOutputStream(tmpfile, false);
> fos.write(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
> fos.close();
>
> fos = new FileOutputStream(tmpfile, true);
> long size = fos.getChannel().position();
> if (10 != size){
> // This return value is 0, mismatching the spec
> System.out.println("Position Error Detected: except 10,
> but was " + size);
> }
> fos.close();
> }
> }
> // End of the testcase
>
> Any comments?
>
This is a long standing issue, 6526860 but hasn't been high priority as
it probably isn't too common to query or change the file position when
opened for append.
-Alan.
More information about the core-libs-dev
mailing list