public abstract class ArchiveRecord
extends java.io.InputStream
| Modifier and Type | Field and Description |
|---|---|
protected java.security.MessageDigest |
digest
Compute digest on what we read and add to metadata when done.
|
protected boolean |
eor
Set flag when we've reached the end-of-record.
|
protected ArchiveRecordHeader |
header |
protected java.io.InputStream |
in
Stream to read this record from.
|
protected static long |
MIN_HTTP_HEADER_LENGTH
Minimal http response or request header length.
|
protected long |
position
Position w/i the Record content, within
in. |
protected boolean |
strict |
| Constructor and Description |
|---|
ArchiveRecord(java.io.InputStream in)
Constructor.
|
ArchiveRecord(java.io.InputStream in,
ArchiveRecordHeader header)
Constructor.
|
ArchiveRecord(java.io.InputStream in,
ArchiveRecordHeader header,
int bodyOffset,
boolean digest,
boolean strict)
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
int |
available()
This available is not the stream's available.
|
void |
close()
Calling close on a record skips us past this record to the next record
in the stream.
|
void |
dump()
Writes output on STDOUT.
|
void |
dump(java.io.OutputStream os)
Writes output on passed
os. |
protected java.lang.String |
getDigest4Cdx(ArchiveRecordHeader h) |
java.lang.String |
getDigestStr() |
ArchiveRecordHeader |
getHeader() |
protected java.io.InputStream |
getIn() |
protected java.lang.String |
getIp4Cdx(ArchiveRecordHeader h) |
protected java.lang.String |
getMimetype4Cdx(ArchiveRecordHeader h) |
long |
getPosition() |
protected java.lang.String |
getStatusCode4Cdx(ArchiveRecordHeader h) |
boolean |
hasContentHeaders()
Is it likely that this record contains headers?
This method will return true if the body is a http response that includes
http response headers or the body is a http request that includes request
headers, etc.
|
protected void |
incrementPosition() |
protected void |
incrementPosition(long incr) |
protected boolean |
isEor() |
boolean |
isStrict() |
boolean |
markSupported() |
protected java.lang.String |
outputCdx(java.lang.String strippedFileName) |
int |
read() |
int |
read(byte[] b,
int offset,
int length) |
protected void |
setBodyOffset(int bodyOffset) |
protected void |
setEor(boolean eor) |
protected void |
setHeader(ArchiveRecordHeader header) |
void |
setStrict(boolean strict) |
protected void |
skip()
Skip over this records content.
|
long |
skip(long n) |
protected static final long MIN_HTTP_HEADER_LENGTH
protected ArchiveRecordHeader header
protected java.io.InputStream in
Streams can be markable or not. If they are, we'll be able to roll
back when we've read too far. If not markable, assumption is that
the underlying stream is managing our not reading too much (This pertains
to the skipping over the end of the ARCRecord. See skip().
protected long position
in.
This position is relative within this Record. Its not same as the
Archive file position.protected boolean eor
protected java.security.MessageDigest digest
Protected instead of private so subclasses can update and complete the digest.
protected boolean strict
public ArchiveRecord(java.io.InputStream in)
throws java.io.IOException
in - Stream cue'd up to be at the start of the record this instance
is to represent.java.io.IOExceptionpublic ArchiveRecord(java.io.InputStream in,
ArchiveRecordHeader header)
throws java.io.IOException
in - Stream cue'd up to be at the start of the record this instance
is to represent.header - Header data.java.io.IOExceptionpublic ArchiveRecord(java.io.InputStream in,
ArchiveRecordHeader header,
int bodyOffset,
boolean digest,
boolean strict)
throws java.io.IOException
in - Stream cue'd up to be at the start of the record this instance
is to represent.header - Header data.bodyOffset - Offset into the body. Usually 0.digest - True if we're to calculate digest for this record. Not
digesting saves about ~15% of cpu during an ARC parse.strict - Be strict parsing (Parsing stops if ARC inproperly
formatted).java.io.IOExceptionpublic boolean markSupported()
markSupported in class java.io.InputStreampublic ArchiveRecordHeader getHeader()
protected void setHeader(ArchiveRecordHeader header)
public void close()
throws java.io.IOException
close in interface java.io.Closeableclose in interface java.lang.AutoCloseableclose in class java.io.InputStreamjava.io.IOExceptionpublic int read()
throws java.io.IOException
read in class java.io.InputStreamjava.io.IOExceptionpublic int read(byte[] b,
int offset,
int length)
throws java.io.IOException
read in class java.io.InputStreamjava.io.IOExceptionpublic int available()
available in class java.io.InputStreamprotected void skip()
throws java.io.IOException
java.io.IOExceptionpublic long skip(long n)
throws java.io.IOException
skip in class java.io.InputStreamjava.io.IOExceptionpublic boolean isStrict()
public void setStrict(boolean strict)
strict - The strict to set.protected java.io.InputStream getIn()
public java.lang.String getDigestStr()
protected void incrementPosition()
protected void incrementPosition(long incr)
public long getPosition()
protected boolean isEor()
protected void setEor(boolean eor)
protected java.lang.String getStatusCode4Cdx(ArchiveRecordHeader h)
protected java.lang.String getIp4Cdx(ArchiveRecordHeader h)
protected java.lang.String getDigest4Cdx(ArchiveRecordHeader h)
protected java.lang.String getMimetype4Cdx(ArchiveRecordHeader h)
protected java.lang.String outputCdx(java.lang.String strippedFileName)
throws java.io.IOException
java.io.IOExceptionpublic void dump()
throws java.io.IOException
java.io.IOExceptionpublic void dump(java.io.OutputStream os)
throws java.io.IOException
os.java.io.IOExceptionpublic boolean hasContentHeaders()
ArchiveRecordHeader 'headers'.protected void setBodyOffset(int bodyOffset)
Copyright © 2019 The International Internet Preservation Consortium. All Rights Reserved.