mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-04 12:05:29 -04:00
Fix streamPos/bitPos issue in SubImageOutputStream.
This commit is contained in:
parent
792b531b0e
commit
0170ee36a9
@ -4,6 +4,8 @@ import javax.imageio.stream.ImageOutputStream;
|
||||
import javax.imageio.stream.ImageOutputStreamImpl;
|
||||
import java.io.IOException;
|
||||
|
||||
import static com.twelvemonkeys.lang.Validate.notNull;
|
||||
|
||||
/**
|
||||
* ImageInputStream that writes through a delegate, but keeps local position and bit offset.
|
||||
* Note: Flushing or closing this stream will *not* have an effect on the delegate.
|
||||
@ -14,29 +16,47 @@ import java.io.IOException;
|
||||
*/
|
||||
public class SubImageOutputStream extends ImageOutputStreamImpl {
|
||||
private final ImageOutputStream stream;
|
||||
private final long startPos;
|
||||
|
||||
public SubImageOutputStream(final ImageOutputStream stream) {
|
||||
this.stream = stream;
|
||||
public SubImageOutputStream(final ImageOutputStream stream) throws IOException {
|
||||
this.stream = notNull(stream, "stream");
|
||||
startPos = stream.getStreamPosition();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void seek(long pos) throws IOException {
|
||||
super.seek(pos);
|
||||
stream.seek(startPos + pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(int b) throws IOException {
|
||||
flushBits();
|
||||
|
||||
stream.write(b);
|
||||
streamPos++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(byte[] b, int off, int len) throws IOException {
|
||||
flushBits();
|
||||
stream.write(b, off, len);
|
||||
streamPos += len;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read() throws IOException {
|
||||
bitOffset = 0;
|
||||
streamPos++;
|
||||
return stream.read();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read(byte[] b, int off, int len) throws IOException {
|
||||
return stream.read(b, off, len);
|
||||
bitOffset = 0;
|
||||
int count = stream.read(b, off, len);
|
||||
streamPos += count;
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user