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

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

      dataOutputStream.changeOutputStream(byteOutputStream2);
      for (Integer integer : integers2) {
        dataOutputStream.serialize(intSerializer(), integer, MAX_SIZE_127);
      }
    }

    ByteArrayInputStream byteInputStream1 =
        new ByteArrayInputStream(byteOutputStream1.toByteArray());
    ByteArrayInputStream byteInputStream2 =
        new ByteArrayInputStream(byteOutputStream2.toByteArray());

    try (DataInputStreamEx dataInputStream1 = DataInputStreamEx.create(byteInputStream1, 10);
        DataInputStreamEx dataInputStream2 = DataInputStreamEx.create(byteInputStream2, 10)) {
      for (Integer integer : integers1) {
        assertEquals(integer, dataInputStream1.deserialize(intSerializer()));
      }

      for (Integer integer : integers2) {
        assertEquals(integer, dataInputStream2.deserialize(intSerializer()));
      }
      assertTrue(dataInputStream1.isEndOfStream());
      assertTrue(dataInputStream2.isEndOfStream());
    }

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