⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testcompoundfile.java

📁 索引aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    }    private void demo_FSInputStreamBug(FSDirectory fsdir, String file)    throws IOException    {        // Setup the test file - we need more than 1024 bytes        OutputStream os = fsdir.createFile(file);        for(int i=0; i<2000; i++) {            os.writeByte((byte) i);        }        os.close();        InputStream in = fsdir.openFile(file);        // This read primes the buffer in InputStream        byte b = in.readByte();        // Close the file        in.close();        // ERROR: this call should fail, but succeeds because the buffer        // is still filled        b = in.readByte();        // ERROR: this call should fail, but succeeds for some reason as well        in.seek(1099);        try {            // OK: this call correctly fails. We are now past the 1024 internal            // buffer, so an actual IO is attempted, which fails            b = in.readByte();        } catch (IOException e) {        }    }    static boolean isCSInputStream(InputStream is) {        return is instanceof CompoundFileReader.CSInputStream;    }    static boolean isCSInputStreamOpen(InputStream is) throws IOException {        if (isCSInputStream(is)) {            CompoundFileReader.CSInputStream cis =            (CompoundFileReader.CSInputStream) is;            return _TestHelper.isFSInputStreamOpen(cis.base);        } else {            return false;        }    }    public void testClonedStreamsClosing() throws IOException {        setUp_2();        CompoundFileReader cr = new CompoundFileReader(dir, "f.comp");        // basic clone        InputStream expected = dir.openFile("f11");        assertTrue(_TestHelper.isFSInputStreamOpen(expected));        InputStream one = cr.openFile("f11");        assertTrue(isCSInputStreamOpen(one));        InputStream two = (InputStream) one.clone();        assertTrue(isCSInputStreamOpen(two));        assertSameStreams("basic clone one", expected, one);        expected.seek(0);        assertSameStreams("basic clone two", expected, two);        // Now close the first stream        one.close();        assertTrue("Only close when cr is closed", isCSInputStreamOpen(one));        // The following should really fail since we couldn't expect to        // access a file once close has been called on it (regardless of        // buffering and/or clone magic)        expected.seek(0);        two.seek(0);        assertSameStreams("basic clone two/2", expected, two);        // Now close the compound reader        cr.close();        assertFalse("Now closed one", isCSInputStreamOpen(one));        assertFalse("Now closed two", isCSInputStreamOpen(two));        // The following may also fail since the compound stream is closed        expected.seek(0);        two.seek(0);        //assertSameStreams("basic clone two/3", expected, two);        // Now close the second clone        two.close();        expected.seek(0);        two.seek(0);        //assertSameStreams("basic clone two/4", expected, two);        expected.close();    }    /** This test opens two files from a compound stream and verifies that     *  their file positions are independent of each other.     */    public void testRandomAccess() throws IOException {        setUp_2();        CompoundFileReader cr = new CompoundFileReader(dir, "f.comp");        // Open two files        InputStream e1 = dir.openFile("f11");        InputStream e2 = dir.openFile("f3");        InputStream a1 = cr.openFile("f11");        InputStream a2 = dir.openFile("f3");        // Seek the first pair        e1.seek(100);        a1.seek(100);        assertEquals(100, e1.getFilePointer());        assertEquals(100, a1.getFilePointer());        byte be1 = e1.readByte();        byte ba1 = a1.readByte();        assertEquals(be1, ba1);        // Now seek the second pair        e2.seek(1027);        a2.seek(1027);        assertEquals(1027, e2.getFilePointer());        assertEquals(1027, a2.getFilePointer());        byte be2 = e2.readByte();        byte ba2 = a2.readByte();        assertEquals(be2, ba2);        // Now make sure the first one didn't move        assertEquals(101, e1.getFilePointer());        assertEquals(101, a1.getFilePointer());        be1 = e1.readByte();        ba1 = a1.readByte();        assertEquals(be1, ba1);        // Now more the first one again, past the buffer length        e1.seek(1910);        a1.seek(1910);        assertEquals(1910, e1.getFilePointer());        assertEquals(1910, a1.getFilePointer());        be1 = e1.readByte();        ba1 = a1.readByte();        assertEquals(be1, ba1);        // Now make sure the second set didn't move        assertEquals(1028, e2.getFilePointer());        assertEquals(1028, a2.getFilePointer());        be2 = e2.readByte();        ba2 = a2.readByte();        assertEquals(be2, ba2);        // Move the second set back, again cross the buffer size        e2.seek(17);        a2.seek(17);        assertEquals(17, e2.getFilePointer());        assertEquals(17, a2.getFilePointer());        be2 = e2.readByte();        ba2 = a2.readByte();        assertEquals(be2, ba2);        // Finally, make sure the first set didn't move        // Now make sure the first one didn't move        assertEquals(1911, e1.getFilePointer());        assertEquals(1911, a1.getFilePointer());        be1 = e1.readByte();        ba1 = a1.readByte();        assertEquals(be1, ba1);        e1.close();        e2.close();        a1.close();        a2.close();        cr.close();    }    /** This test opens two files from a compound stream and verifies that     *  their file positions are independent of each other.     */    public void testRandomAccessClones() throws IOException {        setUp_2();        CompoundFileReader cr = new CompoundFileReader(dir, "f.comp");        // Open two files        InputStream e1 = cr.openFile("f11");        InputStream e2 = cr.openFile("f3");        InputStream a1 = (InputStream) e1.clone();        InputStream a2 = (InputStream) e2.clone();        // Seek the first pair        e1.seek(100);        a1.seek(100);        assertEquals(100, e1.getFilePointer());        assertEquals(100, a1.getFilePointer());        byte be1 = e1.readByte();        byte ba1 = a1.readByte();        assertEquals(be1, ba1);        // Now seek the second pair        e2.seek(1027);        a2.seek(1027);        assertEquals(1027, e2.getFilePointer());        assertEquals(1027, a2.getFilePointer());        byte be2 = e2.readByte();        byte ba2 = a2.readByte();        assertEquals(be2, ba2);        // Now make sure the first one didn't move        assertEquals(101, e1.getFilePointer());        assertEquals(101, a1.getFilePointer());        be1 = e1.readByte();        ba1 = a1.readByte();        assertEquals(be1, ba1);        // Now more the first one again, past the buffer length        e1.seek(1910);        a1.seek(1910);        assertEquals(1910, e1.getFilePointer());        assertEquals(1910, a1.getFilePointer());        be1 = e1.readByte();        ba1 = a1.readByte();        assertEquals(be1, ba1);        // Now make sure the second set didn't move        assertEquals(1028, e2.getFilePointer());        assertEquals(1028, a2.getFilePointer());        be2 = e2.readByte();        ba2 = a2.readByte();        assertEquals(be2, ba2);        // Move the second set back, again cross the buffer size        e2.seek(17);        a2.seek(17);        assertEquals(17, e2.getFilePointer());        assertEquals(17, a2.getFilePointer());        be2 = e2.readByte();        ba2 = a2.readByte();        assertEquals(be2, ba2);        // Finally, make sure the first set didn't move        // Now make sure the first one didn't move        assertEquals(1911, e1.getFilePointer());        assertEquals(1911, a1.getFilePointer());        be1 = e1.readByte();        ba1 = a1.readByte();        assertEquals(be1, ba1);        e1.close();        e2.close();        a1.close();        a2.close();        cr.close();    }    public void testFileNotFound() throws IOException {        setUp_2();        CompoundFileReader cr = new CompoundFileReader(dir, "f.comp");        // Open two files        try {            InputStream e1 = cr.openFile("bogus");            fail("File not found");        } catch (IOException e) {            /* success */            //System.out.println("SUCCESS: File Not Found: " + e);        }        cr.close();    }    public void testReadPastEOF() throws IOException {        setUp_2();        CompoundFileReader cr = new CompoundFileReader(dir, "f.comp");        InputStream is = cr.openFile("f2");        is.seek(is.length() - 10);        byte b[] = new byte[100];        is.readBytes(b, 0, 10);        try {            byte test = is.readByte();            fail("Single byte read past end of file");        } catch (IOException e) {            /* success */            //System.out.println("SUCCESS: single byte read past end of file: " + e);        }        is.seek(is.length() - 10);        try {            is.readBytes(b, 0, 50);            fail("Block read past end of file");        } catch (IOException e) {            /* success */            //System.out.println("SUCCESS: block read past end of file: " + e);        }        is.close();        cr.close();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -