private static byte[] readEntry(final InputStream zis, final ZipEntry ze)
			throws IOException {
		long size = ze.getSize();
		if (size > -1) {
			byte[] buff = new byte[(int) size];
			int k = 0;
			int n;
			while ((n = zis.read(buff, k, buff.length - k)) > 0) {
				k += n;
			}
			return buff;
		}

		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		byte[] buff = new byte[4096];
		int i;
		while ((i = zis.read(buff)) != -1) {
			bos.write(buff, 0, i);
		}
		return bos.toByteArray();
	}