DeflatorInputStream e DeflatorOutputStream não reconstroem os dados originais

Eu quero compactar alguns dados, então me deparei com as classes DeflatorInputStream & DeflatorOutputStream. No entanto, o exemplo a seguir mostra que não consigo reconstruir meus dados originais ao usar essas classes.

Quando eu mudo para um ZipInputStream e ZipOutputStream ele funciona, mas como eu não preciso de arquivos zip por si só, eu pensei que uma compressão genérica seria melhor. Principalmente, estou interessado em entender por que esse exemplo não funciona.

//Create some "random" data
int bytesLength = 1024;
byte[] bytes = new byte[bytesLength];
for(int i = 0; i < bytesLength; i++) {
     bytes[i] = (byte) (i % 10);
}

//Compress the data, and write it to somewhere (a byte array for this example)
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
DeflaterOutputStream outputStream = new DeflaterOutputStream(arrayOutputStream);
outputStream.write(bytes);

//Read and decompress the data
byte[] readBuffer = new byte[5000];
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());
DeflaterInputStream inputStream = new DeflaterInputStream(arrayInputStream);
int read = inputStream.read(readBuffer);

//Should hold the original (reconstructed) data
byte[] actuallyRead = Arrays.copyOf(readBuffer, read);

//Results differ - will print false
System.out.println(Arrays.equals(bytes, actuallyRead));

questionAnswers(2)

yourAnswerToTheQuestion