I am trying to write a function which will accept an InputStream with zipped file data and would return another InputStream with unzipped data.
Unless I'm missing something, you should absolutely try and get ZipInputStream to work and there's no reason it shouldn't (I've certainly used it on several occasions).
What you should do is try and get ZipInputStream to work and if you can't, post the code and we'll help you with whatever problems you're having.
Whatever you do though, don't try and reinvent its functionality.