Fix a bug I introduced, and do more zip cleanup.

This code's quite hairy in its use of int/long. I can't just change the fields
to int because they seem to use -1L to mean "unset" while still allowing the
whole int range of values (including -1). We'll have to look at the zip
specification to see whether that's right, but for now, let's just avoid sign

I've also cleaned up some of the other code, most notably throwing more
detailed exception messages where it's easy, and removing hand-made readFully

Bug: 3181430
Change-Id: I382568a8975c9b8b2ee5b344817134472369d308
3 files changed