- java.lang.Object
-
- java.io.InputStream
-
- org.refcodes.serial.PacketInputStream
-
- All Implemented Interfaces:
Closeable,AutoCloseable,org.refcodes.mixin.BlockSizeAccessor,org.refcodes.mixin.PacketSizeAccessor,org.refcodes.numerical.EndianessAccessor,PacketLengthWidthAccessor,PacketMagicBytesAccessor,PacketSegmentPackagerAccessor,SequenceNumberAccessor,SequenceNumberConcatenateModeAccessor,SequenceNumberInitValueAccessor,SequenceNumberWidthAccessor
- Direct Known Subclasses:
StopAndWaitPacketInputStream
public class PacketInputStream extends InputStream implements PacketLengthWidthAccessor, org.refcodes.numerical.EndianessAccessor, org.refcodes.mixin.BlockSizeAccessor, SequenceNumberAccessor, SequenceNumberWidthAccessor, SequenceNumberInitValueAccessor, SequenceNumberConcatenateModeAccessor, org.refcodes.mixin.PacketSizeAccessor, PacketSegmentPackagerAccessor, PacketMagicBytesAccessor
ThePacketInputStreamwraps anInputStreamand chunks any data to be written into packets with a sequence number and a block of data. An accordingPacketInputStreamthen reverts the packetised data stream while performing sequence number validation. ASegmentPackagercan be used to add functionality such as CRC checksum support.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPacketInputStream.BuilderBuilder to buildPacketInputStreaminstances.-
Nested classes/interfaces inherited from interface org.refcodes.mixin.BlockSizeAccessor
org.refcodes.mixin.BlockSizeAccessor.BlockSizeBuilder<B extends org.refcodes.mixin.BlockSizeAccessor.BlockSizeBuilder<B>>, org.refcodes.mixin.BlockSizeAccessor.BlockSizeMutator, org.refcodes.mixin.BlockSizeAccessor.BlockSizeProperty
-
Nested classes/interfaces inherited from interface org.refcodes.numerical.EndianessAccessor
org.refcodes.numerical.EndianessAccessor.EndianessBuilder<B extends org.refcodes.numerical.EndianessAccessor.EndianessBuilder<B>>, org.refcodes.numerical.EndianessAccessor.EndianessMutator, org.refcodes.numerical.EndianessAccessor.EndianessProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.PacketLengthWidthAccessor
PacketLengthWidthAccessor.PacketLengthWidthBuilder<B extends PacketLengthWidthAccessor.PacketLengthWidthBuilder<B>>, PacketLengthWidthAccessor.PacketLengthWidthMutator, PacketLengthWidthAccessor.PacketLengthWidthProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.PacketMagicBytesAccessor
PacketMagicBytesAccessor.PacketMagicBytesBuilder<B extends PacketMagicBytesAccessor.PacketMagicBytesBuilder<B>>, PacketMagicBytesAccessor.PacketMagicBytesMutator, PacketMagicBytesAccessor.PacketMagicBytesProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.PacketSegmentPackagerAccessor
PacketSegmentPackagerAccessor.PacketSegmentPackagerBuilder<B extends PacketSegmentPackagerAccessor.PacketSegmentPackagerBuilder<B>>, PacketSegmentPackagerAccessor.PacketSegmentPackagerMutator, PacketSegmentPackagerAccessor.PacketSegmentPackagerProperty
-
Nested classes/interfaces inherited from interface org.refcodes.mixin.PacketSizeAccessor
org.refcodes.mixin.PacketSizeAccessor.PacketSizeBuilder<B extends org.refcodes.mixin.PacketSizeAccessor.PacketSizeBuilder<B>>, org.refcodes.mixin.PacketSizeAccessor.PacketSizeMutator, org.refcodes.mixin.PacketSizeAccessor.PacketSizeProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberAccessor
SequenceNumberAccessor.SequenceNumberBuilder<B extends SequenceNumberAccessor.SequenceNumberBuilder<B>>, SequenceNumberAccessor.SequenceNumberMutator, SequenceNumberAccessor.SequenceNumberProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberConcatenateModeAccessor
SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeBuilder<B extends SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeBuilder<B>>, SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeMutator, SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberInitValueAccessor
SequenceNumberInitValueAccessor.SequenceNumberInitValueBuilder<B extends SequenceNumberInitValueAccessor.SequenceNumberInitValueBuilder<B>>, SequenceNumberInitValueAccessor.SequenceNumberInitValueMutator, SequenceNumberInitValueAccessor.SequenceNumberInitValueProperty
-
Nested classes/interfaces inherited from interface org.refcodes.serial.SequenceNumberWidthAccessor
SequenceNumberWidthAccessor.SequenceNumberWidthBuilder<B extends SequenceNumberWidthAccessor.SequenceNumberWidthBuilder<B>>, SequenceNumberWidthAccessor.SequenceNumberWidthMutator, SequenceNumberWidthAccessor.SequenceNumberWidthProperty
-
-
Field Summary
Fields Modifier and Type Field Description protected AllocSectionDecoratorSegment<SequenceSection>_allocSegmentprotected int_blockOffsetprotected BoundedSequenceDecorator_boundedSequenceprotected InputStream_inputStreamprotected Segment_packetSegmentprotected int_sequenceNumberprotected int_sequenceNumberInitValueprotected NumberSegment_sequenceNumberSegment
-
Constructor Summary
Constructors Constructor Description PacketInputStream(InputStream aInputStream, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, org.refcodes.mixin.ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, org.refcodes.numerical.Endianess aEndianess)Constructs an accordingPacketInputStreaminstance wrapping the givenInputStream.PacketInputStream(InputStream aInputStream, TransmissionMetrics aTransmissionMetrics)Constructs an accordingPacketInputStreaminstance wrapping the givenInputStream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()static PacketInputStream.Builderbuilder()Creates builder to buildPacketInputStream.voidclose()protected voiddoReceivePacket()intgetBlockSize()org.refcodes.numerical.EndianessgetEndianess()intgetPacketLengthWidth()Retrieves the packet length width (in bytes) from the packet length width (in bytes) property.byte[]getPacketMagicBytes()Retrieves the magic bytes from the packet magic bytes property.SegmentPackagergetPacketSegmentPackager()Retrieves theSegmentPackagerfrom the packetSegmentPackagerproperty.intgetPacketSize()intgetSequenceNumber()Retrieves the sequence number from the sequence number property.org.refcodes.mixin.ConcatenateModegetSequenceNumberConcatenateMode()Retrieves theConcatenateModefrom the sequence numberConcatenateModeproperty.intgetSequenceNumberInitValue()Retrieves the sequence number initial value from the sequence number initial value property.intgetSequenceNumberWidth()Retrieves the sequence number width (in bytes) from the sequence number width (in bytes) property.voidmark(int readlimit)booleanmarkSupported()intread()voidreset()-
Methods inherited from class java.io.InputStream
nullInputStream, read, read, readAllBytes, readNBytes, readNBytes, skip, transferTo
-
-
-
-
Field Detail
-
_blockOffset
protected int _blockOffset
-
_inputStream
protected InputStream _inputStream
-
_packetSegment
protected Segment _packetSegment
-
_sequenceNumber
protected int _sequenceNumber
-
_sequenceNumberInitValue
protected int _sequenceNumberInitValue
-
_sequenceNumberSegment
protected NumberSegment _sequenceNumberSegment
-
_allocSegment
protected AllocSectionDecoratorSegment<SequenceSection> _allocSegment
-
_boundedSequence
protected BoundedSequenceDecorator _boundedSequence
-
-
Constructor Detail
-
PacketInputStream
public PacketInputStream(InputStream aInputStream, TransmissionMetrics aTransmissionMetrics)
Constructs an accordingPacketInputStreaminstance wrapping the givenInputStream. The configuration attributes are taken from theTransmissionMetricsconfiguration object, though only those attributes are supported which are also supported by the other constructors!- Parameters:
aInputStream- TheInputStreamto be wrapped.aTransmissionMetrics- TheTransmissionMetricsto be used for configuring this instance.
-
PacketInputStream
public PacketInputStream(InputStream aInputStream, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, org.refcodes.mixin.ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, org.refcodes.numerical.Endianess aEndianess)
Constructs an accordingPacketInputStreaminstance wrapping the givenInputStream.- Parameters:
aInputStream- TheInputStreamto be wrapped.aBlockSize- The block size of a data block for each packet.aPacketLengthWidth- The width (bytes) for declaring the (max) length of a package.aPacketMagicBytes- The magic bytes identifying a packet and distinguishing a packet from a last package.aSequenceNumberInitValue- The initial sequence number from where to start counting the blocks.aSequenceNumberWidth- The width (in bytes) to be used for sequence number values.aSequenceNumberConcatenateMode- The mode of concatenation to use when creating aSequencefrom thisTransmissionand the decoratedTransmission.aPacketSegmentPackager- An (optional)SegmentPackagerused to modify a packet's data e.g. with a CRC checksum.aEndianess- TheEndianessto use for integer (double) numbers and the like.
-
-
Method Detail
-
builder
public static PacketInputStream.Builder builder()
Creates builder to buildPacketInputStream.- Returns:
- created builder
-
available
public int available() throws IOException- Overrides:
availablein classInputStream- Throws:
IOException
-
close
public void close() throws IOException- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classInputStream- Throws:
IOException
-
getBlockSize
public int getBlockSize()
- Specified by:
getBlockSizein interfaceorg.refcodes.mixin.BlockSizeAccessor
-
getEndianess
public org.refcodes.numerical.Endianess getEndianess()
- Specified by:
getEndianessin interfaceorg.refcodes.numerical.EndianessAccessor
-
getPacketMagicBytes
public byte[] getPacketMagicBytes()
Retrieves the magic bytes from the packet magic bytes property.- Specified by:
getPacketMagicBytesin interfacePacketMagicBytesAccessor- Returns:
- The magic bytes stored by the packet magic bytes property.
-
getPacketSegmentPackager
public SegmentPackager getPacketSegmentPackager()
Retrieves theSegmentPackagerfrom the packetSegmentPackagerproperty.- Specified by:
getPacketSegmentPackagerin interfacePacketSegmentPackagerAccessor- Returns:
- The
SegmentPackagerstored by the packetSegmentPackagerproperty.
-
getPacketSize
public int getPacketSize()
- Specified by:
getPacketSizein interfaceorg.refcodes.mixin.PacketSizeAccessor
-
getSequenceNumber
public int getSequenceNumber()
Retrieves the sequence number from the sequence number property.- Specified by:
getSequenceNumberin interfaceSequenceNumberAccessor- Returns:
- The sequence number stored by the sequence number property.
-
getSequenceNumberConcatenateMode
public org.refcodes.mixin.ConcatenateMode getSequenceNumberConcatenateMode()
Retrieves theConcatenateModefrom the sequence numberConcatenateModeproperty.- Specified by:
getSequenceNumberConcatenateModein interfaceSequenceNumberConcatenateModeAccessor- Returns:
- The
ConcatenateModestored by the sequence numberConcatenateModeproperty.
-
getSequenceNumberInitValue
public int getSequenceNumberInitValue()
Retrieves the sequence number initial value from the sequence number initial value property.- Specified by:
getSequenceNumberInitValuein interfaceSequenceNumberInitValueAccessor- Returns:
- The sequence number initial value stored by the sequence number initial value property.
-
getSequenceNumberWidth
public int getSequenceNumberWidth()
Retrieves the sequence number width (in bytes) from the sequence number width (in bytes) property.- Specified by:
getSequenceNumberWidthin interfaceSequenceNumberWidthAccessor- Returns:
- The sequence number width (in bytes) stored by the sequence number width (in bytes) property.
-
getPacketLengthWidth
public int getPacketLengthWidth()
Retrieves the packet length width (in bytes) from the packet length width (in bytes) property.- Specified by:
getPacketLengthWidthin interfacePacketLengthWidthAccessor- Returns:
- The packet length width (in bytes) stored by the packet length width (in bytes) property.
-
mark
public void mark(int readlimit)
- Overrides:
markin classInputStream
-
markSupported
public boolean markSupported()
- Overrides:
markSupportedin classInputStream
-
read
public int read() throws IOException- Specified by:
readin classInputStream- Throws:
IOException
-
reset
public void reset() throws IOException- Overrides:
resetin classInputStream- Throws:
IOException
-
doReceivePacket
protected void doReceivePacket() throws IOException- Throws:
IOException
-
-