Это не надежно, но это, вероятно, самый простой и не зависит от каких-либо внешних данных.Как и все приличные форматы, GZip тоже начинается с магического числа, которое можно быстро проверить, не читая весь поток.
public static InputStream decompressStream(InputStream input) {
PushbackInputStream pb = new PushbackInputStream( input, 2 ); //we need a pushbackstream to look ahead
byte [] signature = new byte[2];
int len = pb.read( signature ); //read the signature
pb.unread( signature, 0, len ); //push back the signature to the stream
if( signature[ 0 ] == (byte) 0x1f && signature[ 1 ] == (byte) 0x8b ) //check if matches standard gzip magic number
return new GZIPInputStream( pb );
else
return pb;
}
(Источник для магического числа: Спецификация формата файла GZip )
Обновление: Я только что обнаружил, что есть такжеконстанта с именем GZIP_MAGIC
в GZipInputStream
, которая содержит это значение, поэтому, если вы действительно хотите 1011 , вы можете использовать ее младшие два байта.