📄 iobuffertest.java
字号:
try { original = IoBuffer.allocate(16); duplicate = original.asReadOnlyBuffer(); duplicate.putString("A very very very very looooooong string", Charset.forName("ISO-8859-1").newEncoder()); fail("ReadOnly buffer's can't be expanded"); } catch (ReadOnlyBufferException e) { // Expected an Exception, signifies test success assertTrue(true); } } @Test public void testGetUnsigned() throws Exception { IoBuffer buf = IoBuffer.allocate(16); buf.put((byte) 0xA4); buf.put((byte) 0xD0); buf.put((byte) 0xB3); buf.put((byte) 0xCD); buf.flip(); buf.order(ByteOrder.LITTLE_ENDIAN); buf.mark(); assertEquals(0xA4, buf.getUnsigned()); buf.reset(); assertEquals(0xD0A4, buf.getUnsignedShort()); buf.reset(); assertEquals(0xCDB3D0A4L, buf.getUnsignedInt()); } @Test public void testIndexOf() throws Exception { boolean direct = false; for (int i = 0; i < 2; i++, direct = !direct) { IoBuffer buf = IoBuffer.allocate(16, direct); buf.put((byte) 0x1); buf.put((byte) 0x2); buf.put((byte) 0x3); buf.put((byte) 0x4); buf.put((byte) 0x1); buf.put((byte) 0x2); buf.put((byte) 0x3); buf.put((byte) 0x4); buf.position(2); buf.limit(5); assertEquals(4, buf.indexOf((byte) 0x1)); assertEquals(-1, buf.indexOf((byte) 0x2)); assertEquals(2, buf.indexOf((byte) 0x3)); assertEquals(3, buf.indexOf((byte) 0x4)); } } // We need an enum with 64 values private static enum TestEnum { E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16, E17, E18, E19, E20, E21, E22, E23, E24, E25, E26, E27, E28, E29, E30, E31, E32, E33, E34, E35, E36, E37, E38, E39, E40, E41, E42, E43, E44, E45, E46, E77, E48, E49, E50, E51, E52, E53, E54, E55, E56, E57, E58, E59, E60, E61, E62, E63, E64 } private static enum TooBigEnum { E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16, E17, E18, E19, E20, E21, E22, E23, E24, E25, E26, E27, E28, E29, E30, E31, E32, E33, E34, E35, E36, E37, E38, E39, E40, E41, E42, E43, E44, E45, E46, E77, E48, E49, E50, E51, E52, E53, E54, E55, E56, E57, E58, E59, E60, E61, E62, E63, E64, E65 } @Test public void testPutEnumSet() { IoBuffer buf = IoBuffer.allocate(8); // Test empty set buf.putEnumSet(EnumSet.noneOf(TestEnum.class)); buf.flip(); assertEquals(0, buf.get()); buf.clear(); buf.putEnumSetShort(EnumSet.noneOf(TestEnum.class)); buf.flip(); assertEquals(0, buf.getShort()); buf.clear(); buf.putEnumSetInt(EnumSet.noneOf(TestEnum.class)); buf.flip(); assertEquals(0, buf.getInt()); buf.clear(); buf.putEnumSetLong(EnumSet.noneOf(TestEnum.class)); buf.flip(); assertEquals(0, buf.getLong()); // Test complete set buf.clear(); buf.putEnumSet(EnumSet.range(TestEnum.E1, TestEnum.E8)); buf.flip(); assertEquals((byte) -1, buf.get()); buf.clear(); buf.putEnumSetShort(EnumSet.range(TestEnum.E1, TestEnum.E16)); buf.flip(); assertEquals((short) -1, buf.getShort()); buf.clear(); buf.putEnumSetInt(EnumSet.range(TestEnum.E1, TestEnum.E32)); buf.flip(); assertEquals(-1, buf.getInt()); buf.clear(); buf.putEnumSetLong(EnumSet.allOf(TestEnum.class)); buf.flip(); assertEquals(-1L, buf.getLong()); // Test high bit set buf.clear(); buf.putEnumSet(EnumSet.of(TestEnum.E8)); buf.flip(); assertEquals(Byte.MIN_VALUE, buf.get()); buf.clear(); buf.putEnumSetShort(EnumSet.of(TestEnum.E16)); buf.flip(); assertEquals(Short.MIN_VALUE, buf.getShort()); buf.clear(); buf.putEnumSetInt(EnumSet.of(TestEnum.E32)); buf.flip(); assertEquals(Integer.MIN_VALUE, buf.getInt()); buf.clear(); buf.putEnumSetLong(EnumSet.of(TestEnum.E64)); buf.flip(); assertEquals(Long.MIN_VALUE, buf.getLong()); // Test high low bits set buf.clear(); buf.putEnumSet(EnumSet.of(TestEnum.E1, TestEnum.E8)); buf.flip(); assertEquals(Byte.MIN_VALUE + 1, buf.get()); buf.clear(); buf.putEnumSetShort(EnumSet.of(TestEnum.E1, TestEnum.E16)); buf.flip(); assertEquals(Short.MIN_VALUE + 1, buf.getShort()); buf.clear(); buf.putEnumSetInt(EnumSet.of(TestEnum.E1, TestEnum.E32)); buf.flip(); assertEquals(Integer.MIN_VALUE + 1, buf.getInt()); buf.clear(); buf.putEnumSetLong(EnumSet.of(TestEnum.E1, TestEnum.E64)); buf.flip(); assertEquals(Long.MIN_VALUE + 1, buf.getLong()); } @Test public void testGetEnumSet() { IoBuffer buf = IoBuffer.allocate(8); // Test empty set buf.put((byte) 0); buf.flip(); assertEquals(EnumSet.noneOf(TestEnum.class), buf .getEnumSet(TestEnum.class)); buf.clear(); buf.putShort((short) 0); buf.flip(); assertEquals(EnumSet.noneOf(TestEnum.class), buf .getEnumSet(TestEnum.class)); buf.clear(); buf.putInt(0); buf.flip(); assertEquals(EnumSet.noneOf(TestEnum.class), buf .getEnumSet(TestEnum.class)); buf.clear(); buf.putLong(0L); buf.flip(); assertEquals(EnumSet.noneOf(TestEnum.class), buf .getEnumSet(TestEnum.class)); // Test complete set buf.clear(); buf.put((byte) -1); buf.flip(); assertEquals(EnumSet.range(TestEnum.E1, TestEnum.E8), buf .getEnumSet(TestEnum.class)); buf.clear(); buf.putShort((short) -1); buf.flip(); assertEquals(EnumSet.range(TestEnum.E1, TestEnum.E16), buf .getEnumSetShort(TestEnum.class)); buf.clear(); buf.putInt(-1); buf.flip(); assertEquals(EnumSet.range(TestEnum.E1, TestEnum.E32), buf .getEnumSetInt(TestEnum.class)); buf.clear(); buf.putLong(-1L); buf.flip(); assertEquals(EnumSet.allOf(TestEnum.class), buf .getEnumSetLong(TestEnum.class)); // Test high bit set buf.clear(); buf.put(Byte.MIN_VALUE); buf.flip(); assertEquals(EnumSet.of(TestEnum.E8), buf.getEnumSet(TestEnum.class)); buf.clear(); buf.putShort(Short.MIN_VALUE); buf.flip(); assertEquals(EnumSet.of(TestEnum.E16), buf .getEnumSetShort(TestEnum.class)); buf.clear(); buf.putInt(Integer.MIN_VALUE); buf.flip(); assertEquals(EnumSet.of(TestEnum.E32), buf .getEnumSetInt(TestEnum.class)); buf.clear(); buf.putLong(Long.MIN_VALUE); buf.flip(); assertEquals(EnumSet.of(TestEnum.E64), buf .getEnumSetLong(TestEnum.class)); // Test high low bits set buf.clear(); byte b = Byte.MIN_VALUE + 1; buf.put(b); buf.flip(); assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E8), buf .getEnumSet(TestEnum.class)); buf.clear(); short s = Short.MIN_VALUE + 1; buf.putShort(s); buf.flip(); assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E16), buf .getEnumSetShort(TestEnum.class)); buf.clear(); buf.putInt(Integer.MIN_VALUE + 1); buf.flip(); assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E32), buf .getEnumSetInt(TestEnum.class)); buf.clear(); buf.putLong(Long.MIN_VALUE + 1); buf.flip(); assertEquals(EnumSet.of(TestEnum.E1, TestEnum.E64), buf .getEnumSetLong(TestEnum.class)); } @Test public void testBitVectorOverFlow() { IoBuffer buf = IoBuffer.allocate(8); try { buf.putEnumSet(EnumSet.of(TestEnum.E9)); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException e) { // Expected an Exception, signifies test success assertTrue(true); } try { buf.putEnumSetShort(EnumSet.of(TestEnum.E17)); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException e) { // Expected an Exception, signifies test success assertTrue(true); } try { buf.putEnumSetInt(EnumSet.of(TestEnum.E33)); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException e) { // Expected an Exception, signifies test success assertTrue(true); } try { buf.putEnumSetLong(EnumSet.of(TooBigEnum.E65)); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException e) { // Expected an Exception, signifies test success assertTrue(true); } } @Test public void testGetPutEnum() { IoBuffer buf = IoBuffer.allocate(4); buf.putEnum(TestEnum.E64); buf.flip(); assertEquals(TestEnum.E64, buf.getEnum(TestEnum.class)); buf.clear(); buf.putEnumShort(TestEnum.E64); buf.flip(); assertEquals(TestEnum.E64, buf.getEnumShort(TestEnum.class)); buf.clear(); buf.putEnumInt(TestEnum.E64); buf.flip(); assertEquals(TestEnum.E64, buf.getEnumInt(TestEnum.class)); } @Test public void testGetMediumInt() { IoBuffer buf = IoBuffer.allocate(3); buf.put((byte) 0x01); buf.put((byte) 0x02); buf.put((byte) 0x03); assertEquals(3, buf.position()); buf.flip(); assertEquals(0x010203, buf.getMediumInt()); assertEquals(0x010203, buf.getMediumInt(0)); buf.flip(); assertEquals(0x010203, buf.getUnsignedMediumInt()); assertEquals(0x010203, buf.getUnsignedMediumInt(0)); buf.flip(); assertEquals(0x010203, buf.getUnsignedMediumInt()); buf.flip().order(ByteOrder.LITTLE_ENDIAN); assertEquals(0x030201, buf.getMediumInt()); assertEquals(0x030201, buf.getMediumInt(0)); // Test max medium int buf.flip().order(ByteOrder.BIG_ENDIAN); buf.put((byte) 0x7f); buf.put((byte) 0xff); buf.put((byte) 0xff); buf.flip(); assertEquals(0x7fffff, buf.getMediumInt()); assertEquals(0x7fffff, buf.getMediumInt(0)); // Test negative number buf.flip().order(ByteOrder.BIG_ENDIAN); buf.put((byte) 0xff); buf.put((byte) 0x02); buf.put((byte) 0x03); buf.flip(); assertEquals(0xffff0203, buf.getMediumInt()); assertEquals(0xffff0203, buf.getMediumInt(0)); buf.flip(); assertEquals(0x00ff0203, buf.getUnsignedMediumInt()); assertEquals(0x00ff0203, buf.getUnsignedMediumInt(0)); } @Test public void testPutMediumInt() { IoBuffer buf = IoBuffer.allocate(3); checkMediumInt(buf, 0); checkMediumInt(buf, 1); checkMediumInt(buf, -1); checkMediumInt(buf, 0x7fffff); } private void checkMediumInt(IoBuffer buf, int x) { buf.putMediumInt(x); assertEquals(3, buf.position()); buf.flip(); assertEquals(x, buf.getMediumInt()); assertEquals(3, buf.position()); buf.putMediumInt(0, x); assertEquals(3, buf.position()); assertEquals(x, buf.getMediumInt(0)); buf.flip(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -