@Test
  public void testChangeInputStream() throws IOException, SerializeException, DeserializeException {
    final Integer[] integers1 = new Integer[] {10, 20, 30, 42};
    final Integer[] integers2 = new Integer[] {10, 20, 30, 42};

    ByteArrayOutputStream byteOutputStream1 = new ByteArrayOutputStream();
    try (DataOutputStreamEx dataOutputStream1 = DataOutputStreamEx.create(byteOutputStream1, 30)) {
      for (Integer integer : integers1) {
        dataOutputStream1.serialize(intSerializer(), integer, MAX_SIZE_127);
      }
    }

    ByteArrayOutputStream byteOutputStream2 = new ByteArrayOutputStream();
    try (DataOutputStreamEx dataOutputStream2 = DataOutputStreamEx.create(byteOutputStream2, 30)) {
      for (Integer integer : integers2) {
        dataOutputStream2.serialize(intSerializer(), integer, MAX_SIZE_127);
      }
    }

    ByteArrayInputStream byteInputStream1 =
        new ByteArrayInputStream(byteOutputStream1.toByteArray());
    ByteArrayInputStream byteInputStream2 =
        new ByteArrayInputStream(byteOutputStream2.toByteArray());
    try (DataInputStreamEx dataInputStream = DataInputStreamEx.create(byteInputStream1, 10)) {
      for (Integer integer : integers1) {
        assertEquals(integer, dataInputStream.deserialize(intSerializer()));
      }

      dataInputStream.changeInputStream(byteInputStream2);
      for (Integer integer : integers2) {
        assertEquals(integer, dataInputStream.deserialize(intSerializer()));
      }

      assertTrue(dataInputStream.isEndOfStream());
    }

    assertEquals(getPoolItemsString(), getCreatedItems(), getPoolItems());
  }