harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Zhang" <zhanghuang...@gmail.com>
Subject Re: [classlib][nio]the conflict of RI and spec?
Date Wed, 19 Jul 2006 17:33:00 GMT
On 7/19/06, Paulex Yang <paulex.yang@gmail.com> wrote:
>
> I tried the test, and it failed as you said with RI on my WinXP. And I
> also tried to pass in a read/write FileChannel got from
> RandomAccessFile, the test passes.


Paulex, the test fails on my machine!

Seems RI returns 2*length instead of length.

For failure details, please refer to [1].



> I consider this is RI's bug, because
> no way to have such different behavior in this clear test. So I think we
> should follow spec.



> I also suggest to report this to Sun JDK bug db as well, because I think
> it is not trivial. And I don't believe Sun will at last decide, instead
> to fix this, to modify the document as "the behavior is implementation
> dependent if the source channel has fewer than count bytes remaining..."
> ;-)


Maybe it will be fixed as: "For FileChannel, the channel will be resized to
the postion+count bytes if  position+count is greater than current file
channel size. " :) Just kidding.

As our compatiblity guideline, we should comply with spec.
But will the behaviour of RI  be considered as illogical? Personally I
think RI's behaviour breaks spec, and is only a bit(very limited)  logical.

Any suggestions/comments?

Thanks.

Jimmy, Jing Lv wrote:
> > Hi:
> >
> >     I find a conflict that RI does not behave as spec says in
> > java.nio.channels.FileChannel.transforFrom(ReadableByteChannel src,
> >                              long position,long count).
> >     The spec says:"...Fewer than the requested number of bytes will be
> > transferred if the source channel has fewer than count bytes
> > remaining..."[1]. As expected, invoking this method with a count
> > larger than the number of bytes remaining in the ReadableByteChannel,
> > RI should return a number of bytes exactly transfered. But in fact, RI
> > throws an IOException. I run the test[2] on windowsXP SP2 with
> > RI1.5.0_01 and RI1.5.0_06, and on Linux(redhat 9) with RI1.5.0_02 and
> > RI1.5.0_06, and get the same result.
> >     Currently Harmony behave well on this. I guess this is a bug of
> > RI, and Harmony implementation is good. If no objection, I suggest add
> > this test to Harmony.
> >     Any opinions? Thanks!
> >
> >
> > [1] spec of FileChannel:
> >
> http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/FileChannel.html
> >
> > [2] the test:
> >     public void test_transferFromLReadableByteChannelJJ_overflow()
> >             throws Exception {
> >         String content = "test content";
> >         int length = content.length();
> >         File readFile = File.createTempFile("testfile1", "tmp");
> >         File writeFile = File.createTempFile("testfile2", "tmp");
> >         FileOutputStream fos = new FileOutputStream(readFile);
> >         try {
> >             fos.write(content.getBytes());
> >         } finally {
> >             fos.close();
> >         }
> >         FileChannel fc1 = new FileInputStream(readFile).getChannel();
> >         FileChannel fc2 = new FileOutputStream(writeFile).getChannel();
> >         try {
> >             long result = fc2.transferFrom(fc1, 0, length * 2);
> >             assertEquals(length, result);
> >         } finally {
> >             fc1.close();
> >             fc2.close();
> >         }
> >     }
> >
>
>
> --
> Paulex Yang
> China Software Development Lab
> IBM
>
>
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
>
[1]
junit.framework.AssertionFailedError: expected:<12> but was:<24>
 at junit.framework.Assert.fail(Assert.java:47)
 at junit.framework.Assert.failNotEquals(Assert.java:282)
 at junit.framework.Assert.assertEquals(Assert.java:64)
 at junit.framework.Assert.assertEquals(Assert.java:136)
 at junit.framework.Assert.assertEquals(Assert.java:142)
 at
com.andrew.FileChannelTest.test_transferFromLReadableByteChannelJJ_overflow2
(FileChannelTest.java:55)
 ... ...


-- 
Andrew Zhang
China Software Development Lab, IBM

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message