in apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java [107:138]
public static boolean isBinary(InputStream in) {
try {
byte[] taste = new byte[200];
int bytesRead = in.read(taste);
if (bytesRead > 0) {
ByteBuffer bytes = ByteBuffer.wrap(taste, 0, bytesRead);
CharBuffer chars = CharBuffer.allocate(2 * bytesRead);
CharsetDecoder cd = CHARSET_FROM_FILE_ENCODING_OR_UTF8.newDecoder()
.onMalformedInput(CodingErrorAction.REPORT)
.onUnmappableCharacter(CodingErrorAction.REPORT);
while (bytes.remaining() > 0) {
CoderResult res = cd.decode(bytes, chars, true);
if (res.isMalformed() || res.isUnmappable()) {
return true;
} else if (res.isOverflow()) {
chars.limit(chars.position());
chars.rewind();
int c = chars.capacity() * 2;
CharBuffer on = CharBuffer.allocate(c);
on.put(chars);
chars = on;
}
}
chars.limit(chars.position());
chars.rewind();
return isBinary(chars);
}
} catch (IOException e) {
// SWALLOW
}
return false;
}