Class FixedLengthBlockOutputStream
- java.lang.Object
-
- java.io.OutputStream
-
- org.apache.commons.compress.utils.FixedLengthBlockOutputStream
-
- All Implemented Interfaces:
java.io.Closeable
,java.io.Flushable
,java.lang.AutoCloseable
,java.nio.channels.Channel
,java.nio.channels.WritableByteChannel
public class FixedLengthBlockOutputStream extends java.io.OutputStream implements java.nio.channels.WritableByteChannel
This class supports writing to an Outputstream or WritableByteChannel in fixed length blocks.It can be be used to support output to devices such as tape drives that require output in this format. If the final block does not have enough content to fill an entire block, the output will be padded to a full block size.
This class can be used to support TAR,PAX, and CPIO blocked output to character special devices. It is not recommended that this class be used unless writing to such devices, as the padding serves no useful purpose in such cases.
This class should normally wrap a FileOutputStream or associated WritableByteChannel directly. If there is an intervening filter that modified the output, such as a CompressorOutputStream, or performs its own buffering, such as BufferedOutputStream, output to the device may no longer be of the specified size.
Any content written to this stream should be self-delimiting and should tolerate any padding added to fill the last block.
- Since:
- 1.15
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
FixedLengthBlockOutputStream.BufferAtATimeOutputChannel
Helper class to provide channel wrapper for arbitrary output stream that doesn't alter the size of writes.
-
Constructor Summary
Constructors Constructor Description FixedLengthBlockOutputStream(java.io.OutputStream os, int blockSize)
Create a fixed length block output stream with given destination stream and block sizeFixedLengthBlockOutputStream(java.nio.channels.WritableByteChannel out, int blockSize)
Create a fixed length block output stream with given destination writable byte channel and block size
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
void
flushBlock()
Potentially pads and then writes the current block to the underlying stream.boolean
isOpen()
private void
maybeFlush()
private void
padBlock()
void
write(byte[] b, int offset, int length)
void
write(int b)
int
write(java.nio.ByteBuffer src)
private void
writeBlock()
-
-
-
Constructor Detail
-
FixedLengthBlockOutputStream
public FixedLengthBlockOutputStream(java.io.OutputStream os, int blockSize)
Create a fixed length block output stream with given destination stream and block size- Parameters:
os
- The stream to wrap.blockSize
- The block size to use.
-
FixedLengthBlockOutputStream
public FixedLengthBlockOutputStream(java.nio.channels.WritableByteChannel out, int blockSize)
Create a fixed length block output stream with given destination writable byte channel and block size- Parameters:
out
- The writable byte channel to wrap.blockSize
- The block size to use.
-
-
Method Detail
-
maybeFlush
private void maybeFlush() throws java.io.IOException
- Throws:
java.io.IOException
-
writeBlock
private void writeBlock() throws java.io.IOException
- Throws:
java.io.IOException
-
write
public void write(int b) throws java.io.IOException
- Specified by:
write
in classjava.io.OutputStream
- Throws:
java.io.IOException
-
write
public void write(byte[] b, int offset, int length) throws java.io.IOException
- Overrides:
write
in classjava.io.OutputStream
- Throws:
java.io.IOException
-
write
public int write(java.nio.ByteBuffer src) throws java.io.IOException
- Specified by:
write
in interfacejava.nio.channels.WritableByteChannel
- Throws:
java.io.IOException
-
isOpen
public boolean isOpen()
- Specified by:
isOpen
in interfacejava.nio.channels.Channel
-
flushBlock
public void flushBlock() throws java.io.IOException
Potentially pads and then writes the current block to the underlying stream.- Throws:
java.io.IOException
- if writing fails
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.nio.channels.Channel
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.io.OutputStream
- Throws:
java.io.IOException
-
padBlock
private void padBlock()
-
-