code: protected ARCRecord createArchiveRecord(InputStream is, long offset)
      throws IOException {
          try {
              String version = super.getVersion();
              ARCRecord record = new ARCRecord(is, getReaderIdentifier(), offset,
                      isDigest(), isStrict(), isParseHttpHeaders(),
                      isAlignedOnFirstRecord(), version);
              if (version != null && super.getVersion() == null)
                  super.setVersion(version);
              currentRecord(record);
          } catch (IOException e) {
              if (e instanceof RecoverableIOException) {
                  // Don't mess with RecoverableIOExceptions.  Let them out.
                  throw e;
              }
              IOException newE = new IOException(e.getMessage() + " (Offset " +
                      offset + ").");
              newE.setStackTrace(e.getStackTrace());
              throw newE;
          }
          return (ARCRecord)getCurrentRecord();
      }
docs: Create new arc record.
  
  Encapsulate housekeeping that has to do w/ creating a new record.
  
  <p>Call this method at end of constructor to read in the
  arcfile header.  Will be problems reading subsequent arc records
  if you don't since arcfile header has the list of metadata fields for
  all records that follow.
  
  <p>When parsing through ARCs writing out CDX info, we spend about
  38% of CPU in here -- about 30% of which is in getTokenizedHeaderLine
  -- of which 16% is reading.
  
  @param is InputStream to use.
  @param offset Absolute offset into arc file.
  @return An arc record.
  @throws IOException