protected Header readHeaderFromStream(InputStream is) throws IOException {
    ReadableByteChannel channel = Channels.newChannel(is);
    // Read header fixed portion
    ByteBuffer headerBuffer = ShapefileUtils.readByteChannelToBuffer(channel, FIXED_HEADER_LENGTH);
    Header header = this.readHeaderFromBuffer(headerBuffer);
    // Read fields description header
    int fieldsHeaderLength = header.headerLength - FIXED_HEADER_LENGTH;
    header.fieldsHeaderBuffer = ShapefileUtils.readByteChannelToBuffer(channel, fieldsHeaderLength);

    return header;
  }