Class PacketOutputStream
java.lang.Object
java.io.OutputStream
org.refcodes.serial.PacketOutputStream
- All Implemented Interfaces:
Closeable, Flushable, AutoCloseable, BlockSizeAccessor, PacketSizeAccessor, EndianessAccessor, PacketLengthWidthAccessor, PacketMagicBytesAccessor, PacketSegmentPackagerAccessor, SequenceNumberAccessor, SequenceNumberConcatenateModeAccessor, SequenceNumberInitValueAccessor, SequenceNumberWidthAccessor
- Direct Known Subclasses:
StopAndWaitPacketOutputStream
public class PacketOutputStream
extends OutputStream
implements PacketLengthWidthAccessor, PacketSizeAccessor, EndianessAccessor, BlockSizeAccessor, SequenceNumberInitValueAccessor, SequenceNumberConcatenateModeAccessor, SequenceNumberAccessor, SequenceNumberWidthAccessor, PacketSegmentPackagerAccessor, PacketMagicBytesAccessor
The
PacketOutputStream wraps an OutputStream and chunks any
data to be written into packets with a sequence number, a block of data and a
CRC checksum. An according StopAndWaitPacketInputStream then reverts
the packetised data stream while performing CRC checksum validation as well
as sequence number validation. ATTENTION: In order to send the last packet
(block of data), call flush() so that it is transmitted even if the
block is not completely filled with bytes.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder to buildStopAndWaitPacketInputStreaminstances.Nested classes/interfaces inherited from interface BlockSizeAccessor
BlockSizeAccessor.BlockSizeBuilder<B>, BlockSizeAccessor.BlockSizeMutator, BlockSizeAccessor.BlockSizePropertyNested classes/interfaces inherited from interface EndianessAccessor
EndianessAccessor.EndianessBuilder<B>, EndianessAccessor.EndianessMutator, EndianessAccessor.EndianessPropertyNested classes/interfaces inherited from interface PacketLengthWidthAccessor
PacketLengthWidthAccessor.PacketLengthWidthBuilder<B>, PacketLengthWidthAccessor.PacketLengthWidthMutator, PacketLengthWidthAccessor.PacketLengthWidthPropertyNested classes/interfaces inherited from interface PacketMagicBytesAccessor
PacketMagicBytesAccessor.PacketMagicBytesBuilder<B>, PacketMagicBytesAccessor.PacketMagicBytesMutator, PacketMagicBytesAccessor.PacketMagicBytesPropertyNested classes/interfaces inherited from interface PacketSegmentPackagerAccessor
PacketSegmentPackagerAccessor.PacketSegmentPackagerBuilder<B>, PacketSegmentPackagerAccessor.PacketSegmentPackagerMutator, PacketSegmentPackagerAccessor.PacketSegmentPackagerPropertyNested classes/interfaces inherited from interface PacketSizeAccessor
PacketSizeAccessor.PacketSizeBuilder<B>, PacketSizeAccessor.PacketSizeMutator, PacketSizeAccessor.PacketSizePropertyNested classes/interfaces inherited from interface SequenceNumberAccessor
SequenceNumberAccessor.SequenceNumberBuilder<B>, SequenceNumberAccessor.SequenceNumberMutator, SequenceNumberAccessor.SequenceNumberPropertyNested classes/interfaces inherited from interface SequenceNumberConcatenateModeAccessor
SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeBuilder<B>, SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModeMutator, SequenceNumberConcatenateModeAccessor.SequenceNumberConcatenateModePropertyNested classes/interfaces inherited from interface SequenceNumberInitValueAccessor
SequenceNumberInitValueAccessor.SequenceNumberInitValueBuilder<B>, SequenceNumberInitValueAccessor.SequenceNumberInitValueMutator, SequenceNumberInitValueAccessor.SequenceNumberInitValuePropertyNested classes/interfaces inherited from interface SequenceNumberWidthAccessor
SequenceNumberWidthAccessor.SequenceNumberWidthBuilder<B>, SequenceNumberWidthAccessor.SequenceNumberWidthMutator, SequenceNumberWidthAccessor.SequenceNumberWidthProperty -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected AllocSectionDecoratorSegment<SequenceSection> protected intprotected Sequenceprotected BoundedSequenceDecoratorprotected Endianessprotected OutputStreamprotected Segmentprotected intprotected NumberSegmentprotected int -
Constructor Summary
ConstructorsConstructorDescriptionPacketOutputStream(OutputStream aOutputStream, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, Endianess aEndianess) Constructs an accordingPacketOutputStreaminstance wrapping the givenOutputStream.PacketOutputStream(OutputStream aOutputStream, TransmissionMetrics aTransmissionMetrics) Constructs an accordingPacketOutputStreaminstance wrapping the givenOutputStream. -
Method Summary
Modifier and TypeMethodDescriptionstatic PacketOutputStream.Builderbuilder()Creates builder to buildPacketOutputStream.voidclose()protected voidDo transmit packet.voidflush()In case a packet is not complete (e.g. it's block's data did filled till thegetBlockSize()length), then the package is sent with it's block data "as is" (a last block's data might get filled up with zeros).intintRetrieves the packet length width (in bytes) from the packet length width (in bytes) property.byte[]Retrieves the magic bytes from the packet magic bytes property.Retrieves theSegmentPackagerfrom the packetSegmentPackagerproperty.intintRetrieves the sequence number from the sequence number property.Retrieves theConcatenateModefrom the sequence numberConcatenateModeproperty.intRetrieves the sequence number initial value from the sequence number initial value property.intRetrieves the sequence number width (in bytes) from the sequence number width (in bytes) property.voidwrite(int b) Methods inherited from class OutputStream
nullOutputStream, write, write
-
Field Details
-
_blockOffset
protected int _blockOffset -
_blockSequence
-
_endianess
-
_outputStream
-
_packetSegment
-
_sequenceNumber
protected int _sequenceNumber -
_sequenceNumberSegment
-
_sequenceNumberWidth
protected int _sequenceNumberWidth -
_allocSegment
-
_boundedSequence
-
-
Constructor Details
-
PacketOutputStream
Constructs an accordingPacketOutputStreaminstance wrapping the givenOutputStream. The configuration attributes are taken from theTransmissionMetricsconfiguration object, though only those attributes are supported which are also supported by the other constructors!- Parameters:
aOutputStream- TheOutputStreamto be wrapped.aTransmissionMetrics- TheTransmissionMetricsto be used for configuring this instance.
-
PacketOutputStream
public PacketOutputStream(OutputStream aOutputStream, int aBlockSize, int aPacketLengthWidth, byte[] aPacketMagicBytes, int aSequenceNumberInitValue, int aSequenceNumberWidth, ConcatenateMode aSequenceNumberConcatenateMode, SegmentPackager aPacketSegmentPackager, Endianess aEndianess) Constructs an accordingPacketOutputStreaminstance wrapping the givenOutputStream.- Parameters:
aOutputStream- TheOutputStreamto 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 Details
-
builder
Creates builder to buildPacketOutputStream.- Returns:
- created builder
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classOutputStream- Throws:
IOException
-
flush
In case a packet is not complete (e.g. it's block's data did filled till thegetBlockSize()length), then the package is sent with it's block data "as is" (a last block's data might get filled up with zeros).- Specified by:
flushin interfaceFlushable- Overrides:
flushin classOutputStream- Throws:
IOException
-
getBlockSize
public int getBlockSize()- Specified by:
getBlockSizein interfaceBlockSizeAccessor
-
getEndianess
- Specified by:
getEndianessin interfaceEndianessAccessor
-
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
Retrieves theSegmentPackagerfrom the packetSegmentPackagerproperty.- Specified by:
getPacketSegmentPackagerin interfacePacketSegmentPackagerAccessor- Returns:
- The
SegmentPackagerstored by the packetSegmentPackagerproperty.
-
getPacketSize
public int getPacketSize()- Specified by:
getPacketSizein interfacePacketSizeAccessor
-
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
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.
-
write
- Specified by:
writein classOutputStream- Throws:
IOException
-
doTransmitPacket
Do transmit packet.- Throws:
IOException- Signals that an I/O exception has occurred.
-