Arquivos compactados

Olá a todos!

Gostaria de saber qual a diferença entre usar a classe ZipFile() passando como parâmetro um objeto String q’ é o nome do arquivo .zip existente ou um objeto File() criando um arquivo .zip, e usar as classes ZipInputStream() ou ZipOutputStream(). A classe ZipFile tem o mesmo objetivo das classes ZipInputStream() e ZipOutputStream(), ou seja servem para a mesma coisa?

Muito obrigado.