Behavior of java.io.FileOutputStream.getChannel() does not match the spec
Sean Chou
zhouyx at linux.vnet.ibm.com
Fri Feb 18 04:24:33 UTC 2011
Oh, I should have done a little more investigation.
Is there a plan to fix it? I can provide a patch if it is needed.
2011/2/17 Alan Bateman <Alan.Bateman at oracle.com>
> 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.
>
--
Best Regards,
Sean Chou
More information about the core-libs-dev
mailing list