public abstract class ARCReader extends ArchiveReader implements ARCConstants, java.io.Closeable
This class knows how to parse an ARC file. Pass it a file path or an URL to an ARC. It can parse ARC Version 1 and 2.
Iterator returns ARCRecord
though Iterator.next() is returning
java.lang.Object. Cast the return.
Profiling java.io vs. memory-mapped ByteBufferInputStream shows the
latter slightly slower -- but not by much. TODO: Test more. Just
change ArchiveReader.getInputStream(File, long).
ArchiveReader.ArchiveRecordIteratorARCConstants.ArcRecordErrorsin, MAX_ALLOWED_RECOVERABLESACTUAL_LENGTH_KEY, ALEXA_DAT_MIME, ARC_FILE_EXTENSION, ARC_GZIP_EXTRA_FIELD, ARC_MAGIC_NUMBER, ARC_META_CHARSET, CARRIAGE_RETURN_ORD, CHECKSUM_FIELD_KEY, CHECKSUM_HEADER_FIELD_KEY, CODE_HEADER_FIELD_KEY, COMPRESSED_ARC_FILE_EXTENSION, DATE_STRING_KEY, DECLARED_LENGTH_KEY, DEFAULT_ENCODING, DEFAULT_GZIP_HEADER_LENGTH, DEFAULT_MAX_ARC_FILE_SIZE, DEFAULT_MIME, DELIMITER, DNS_MIME, DOT_ARC_FILE_EXTENSION, DOT_COMPRESSED_ARC_FILE_EXTENSION, DOT_COMPRESSED_FILE_EXTENSION, FIELD_COUNT, FILEDESC_SCHEME, FILENAME_FIELD_KEY, FILENAME_HEADER_FIELD_KEY, GZIP_HEADER_BEGIN, HEADER_FIELD_SEPARATOR, HEADER_LENGTH, IP_HEADER_FIELD_KEY, IP_KEY, LEADING_NEWLINES_KEY, LINE_SEPARATOR, LOCATION_HEADER_FIELD_KEY, MAX_HEADER_LINE_LENGTH, MAX_META_LENGTH, MAX_METADATA_LINE_LENGTH, MIME_KEY, MINIMUM_RECORD_LENGTH, NEW_LINE_ORD, OFFSET_FIELD_KEY, OFFSET_HEADER_FIELD_KEY, REQUIRED_VERSION_1_HEADER_FIELDS, STATUSCODE_FIELD_KEY, TOKENIZED_PREFIX, TRAILING_CRUFT_KEY, TRAILING_NEWLINES_KEY, URL_KEYABSOLUTE_OFFSET_KEY, CDX, CDX_FILE, CDX_LINE_BUFFER_SIZE, CRLF, DATE_FIELD_KEY, DEFAULT_DIGEST_METHOD, DUMP, GZIP_DUMP, HEADER, INVALID_SUFFIX, LENGTH_FIELD_KEY, MIMETYPE_FIELD_KEY, NOHEAD, OCCUPIED_SUFFIX, ORIGIN_FIELD_KEY, READER_IDENTIFIER_FIELD_KEY, RECORD_IDENTIFIER_FIELD_KEY, SINGLE_SPACE, TYPE_FIELD_KEY, URL_FIELD_KEY, VERSION_FIELD_KEY| Modifier | Constructor and Description |
|---|---|
protected |
ARCReader() |
| Modifier and Type | Method and Description |
|---|---|
protected ARCRecord |
createArchiveRecord(java.io.InputStream is,
long offset)
Create new arc record.
|
static void |
createCDXIndexFile(java.lang.String urlOrPath)
Generate a CDX index file for an ARC file.
|
void |
dump(boolean compress)
Dump this file on STDOUT
|
ARCReader |
getDeleteFileOnCloseReader(java.io.File f) |
java.lang.String |
getDotFileExtension() |
java.lang.String |
getFileExtension() |
java.lang.String |
getVersion()
Returns version of this ARC file.
|
protected void |
gotoEOR(ArchiveRecord record)
Skip over any trailing new lines at end of the record so we're lined up
ready to read the next.
|
protected boolean |
isAlignedOnFirstRecord() |
boolean |
isParseHttpHeaders() |
static void |
main(java.lang.String[] args)
Command-line interface to ARCReader.
|
protected static void |
output(ARCReader reader,
java.lang.String format)
Write out the arcfile.
|
protected boolean |
output(java.lang.String format) |
boolean |
outputRecord(java.lang.String format)
Output passed record using passed format specifier.
|
protected void |
setAlignedOnFirstRecord(boolean alignedOnFirstRecord) |
void |
setParseHttpHeaders(boolean parse) |
cdxOutput, cleanupCurrentRecord, close, currentRecord, get, get, getCurrentRecord, getFileName, getIn, getInputStream, getLogger, getOptions, getReaderIdentifier, getStrippedFileName, getStrippedFileName, getTrueOrFalse, initialize, isCompressed, isDigest, isStrict, isValid, iterator, logStdErr, outputRecord, positionForRecord, setCompressed, setDigest, setIn, setReaderIdentifier, setStrict, setVersion, stripExtension, validate, validateprotected void gotoEOR(ArchiveRecord record) throws java.io.IOException
gotoEOR in class ArchiveReaderrecord - java.io.IOExceptionprotected ARCRecord createArchiveRecord(java.io.InputStream is, long offset) throws java.io.IOException
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.
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.
createArchiveRecord in class ArchiveReaderis - InputStream to use.offset - Absolute offset into arc file.java.io.IOExceptionpublic java.lang.String getVersion()
getVersion in class ArchiveReaderprotected boolean isAlignedOnFirstRecord()
protected void setAlignedOnFirstRecord(boolean alignedOnFirstRecord)
public boolean isParseHttpHeaders()
public void setParseHttpHeaders(boolean parse)
parse - The parseHttpHeaders to set.public java.lang.String getFileExtension()
getFileExtension in class ArchiveReaderpublic java.lang.String getDotFileExtension()
getDotFileExtension in class ArchiveReaderprotected boolean output(java.lang.String format)
throws java.io.IOException,
java.text.ParseException
output in class ArchiveReaderformat - Format to use outputting.java.io.IOExceptionjava.text.ParseExceptionpublic boolean outputRecord(java.lang.String format)
throws java.io.IOException
ArchiveReaderoutputRecord in class ArchiveReaderformat - What format to use outputting.java.io.IOExceptionpublic void dump(boolean compress)
throws java.io.IOException,
java.text.ParseException
ArchiveReaderdump in class ArchiveReaderjava.io.IOExceptionjava.text.ParseExceptionpublic ARCReader getDeleteFileOnCloseReader(java.io.File f)
getDeleteFileOnCloseReader in class ArchiveReaderprotected static void output(ARCReader reader, java.lang.String format) throws java.io.IOException, java.text.ParseException
reader - format - Format to use outputting.java.io.IOExceptionjava.text.ParseExceptionpublic static void createCDXIndexFile(java.lang.String urlOrPath)
throws java.io.IOException,
java.text.ParseException
urlOrPath - The ARC file to generate a CDX index forjava.io.IOExceptionjava.text.ParseExceptionpublic static void main(java.lang.String[] args)
throws org.apache.commons.cli.ParseException,
java.io.IOException,
java.text.ParseException
usage: java org.archive.io.arc.ARCReader [--offset=#] ARCFILE -h,--help Prints this message and exits. -o,--offset Outputs record at this offset into arc file.
See in $HERITRIX_HOME/bin/arcreader for a script that'll
take care of classpaths and the calling of ARCReader.
Outputs using a pseudo-CDX format as described here: CDX Legent and here Example. Legend used in below is: 'CDX b e a m s c V (or v if uncompressed) n g'. Hash is hard-coded straight SHA-1 hash of content.
args - Command-line arguments.org.apache.commons.cli.ParseException - Failed parse of the command line.java.io.IOExceptionjava.text.ParseExceptionCopyright © 2019 The International Internet Preservation Consortium. All Rights Reserved.