On 9/18/06, Richard Liang <[EMAIL PROTECTED]> wrote:
Hello, One Apache Derby test[1] fails on Harmony. It seems that RI always sync the FileOutputStream and FileChannel after each "write", which is different from Harmony. But there is no explicit description in Java Spec. Shall we follow RI? Thanks a lot. The following test cases could demonstrate this issue. public void testFile() { File derbyLog = new File("d:\\", "derby1.log"); try { FileOutputStream fos = new FileOutputStream(derbyLog); fos.write(0x41); assertEquals(1, derbyLog.length()); } catch (Exception e) { e.printStackTrace(); } } public void testFileChannel() { File derbyLog = new File("d:\\", "derby2.log"); try { FileOutputStream fos = new FileOutputStream(derbyLog); FileChannel fc = fos.getChannel(); fc.write(ByteBuffer.wrap(new byte[]{0x41, 0x42})); assertEquals(2, derbyLog.length()); } catch (Exception e) { e.printStackTrace(); } }
Interesting. I think we'd better follow RI although it's implementation dependent. Otherwise, it breaks existing application. To make test more interesting, I wrote a similar test: public void testFile() throws Exception { File derbyLog = File.createTempFile("test", "log"); derbyLog.deleteOnExit(); RandomAccessFile fos = new RandomAccessFile(derbyLog, "rws"); for (int i = 0; i < 1000; i++) { fos.write(0x41); assertEquals(1 + i, derbyLog.length()); } } Run it and you'll be surprised. :-) [1]
http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/logStream.java?view=co -- Richard Liang China Development Lab, IBM --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Andrew Zhang China Software Development Lab, IBM