Search in sources :

Example 1 with LongField

use of org.apache.poi.util.LongField in project poi by apache.

the class NPOIFSFileSystem method hasPOIFSHeader.

/**
     * Checks that the supplied InputStream (which MUST
     *  support mark and reset, or be a PushbackInputStream)
     *  has a POIFS (OLE2) header at the start of it.
     * If your InputStream does not support mark / reset,
     *  then wrap it in a PushBackInputStream, then be
     *  sure to always use that and not the original!
     *  
     *  After the method call, the InputStream is at the
     *  same position as of the time of entering the method.
     *  
     * @param inp An InputStream which supports either mark/reset, or is a PushbackInputStream
     */
public static boolean hasPOIFSHeader(InputStream inp) throws IOException {
    // We want to peek at the first 8 bytes
    inp.mark(8);
    byte[] header = new byte[8];
    int bytesRead = IOUtils.readFully(inp, header);
    LongField signature = new LongField(HeaderBlockConstants._signature_offset, header);
    // Wind back those 8 bytes
    if (inp instanceof PushbackInputStream) {
        PushbackInputStream pin = (PushbackInputStream) inp;
        pin.unread(header, 0, bytesRead);
    } else {
        inp.reset();
    }
    // Did it match the signature?
    return (signature.get() == HeaderBlockConstants._signature);
}
Also used : LongField(org.apache.poi.util.LongField) PushbackInputStream(java.io.PushbackInputStream)

Aggregations

PushbackInputStream (java.io.PushbackInputStream)1 LongField (org.apache.poi.util.LongField)1