Inflater не читает потоки zip. Он читает потоки ZLIB (или DEFLATE). Формат ZIP окружает чистый поток DEFLATE дополнительными метаданными. Inflater не обрабатывает эти метаданные.
Если вы накачиваете на стороне Java, вам нужен Inflater.
На стороне .NET вы можете использовать класс Ionic.Zlib.ZlibStream из DotNetZip для сжатия - другими словами, для создания чего-то, что может читать Java Inflater.
Я только что проверил это; этот код работает. Сторона Java распаковывает то, что сжато стороной .NET.
.NET сторона:
byte[] compressed = Ionic.Zlib.ZlibStream .CompressString(originalText);
File.WriteAllBytes("ToInflate.bin", compressed);
сторона Java:
public void Run()
throws java.io.FileNotFoundException,
java.io.IOException,
java.util.zip.DataFormatException,
java.io.UnsupportedEncodingException,
java.security.NoSuchAlgorithmException
{
String filename = "ToInflate.bin";
File file = new File(filename);
InputStream is = new FileInputStream(file);
// Get the size of the file
int length = (int)file.length();
byte[] deflated = new byte[length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < deflated.length
&& (numRead=is.read(deflated, offset, deflated.length-offset)) >= 0) {
offset += numRead;
}
// Decompress the bytes
Inflater decompressor = new Inflater();
decompressor.setInput(deflated, 0, length);
byte[] result = new byte[100];
int totalRead= 0;
while ((numRead = decompressor.inflate(result)) > 0)
totalRead += numRead;
decompressor.end();
System.out.println("Inflate: total size of inflated data: " + totalRead + "\n");
result = new byte[totalRead];
decompressor = new Inflater();
decompressor.setInput(deflated, 0, length);
int resultLength = decompressor.inflate(result);
decompressor.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
System.out.println("Inflate: inflated string: " + outputString + "\n");
}
(Я немного заржавел на Java, так что это может вынести некоторое улучшение, но вы поняли)