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 javax.imageio.stream.ImageOutputStreamImpl;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.lang.Validate.notNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ImageInputStream that writes through a delegate, but keeps local position and bit offset.
|
* 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.
|
* 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 {
|
public class SubImageOutputStream extends ImageOutputStreamImpl {
|
||||||
private final ImageOutputStream stream;
|
private final ImageOutputStream stream;
|
||||||
|
private final long startPos;
|
||||||
|
|
||||||
public SubImageOutputStream(final ImageOutputStream stream) {
|
public SubImageOutputStream(final ImageOutputStream stream) throws IOException {
|
||||||
this.stream = stream;
|
this.stream = notNull(stream, "stream");
|
||||||
|
startPos = stream.getStreamPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void seek(long pos) throws IOException {
|
||||||
|
super.seek(pos);
|
||||||
|
stream.seek(startPos + pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(int b) throws IOException {
|
public void write(int b) throws IOException {
|
||||||
|
flushBits();
|
||||||
|
|
||||||
stream.write(b);
|
stream.write(b);
|
||||||
|
streamPos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(byte[] b, int off, int len) throws IOException {
|
public void write(byte[] b, int off, int len) throws IOException {
|
||||||
|
flushBits();
|
||||||
stream.write(b, off, len);
|
stream.write(b, off, len);
|
||||||
|
streamPos += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read() throws IOException {
|
public int read() throws IOException {
|
||||||
|
bitOffset = 0;
|
||||||
|
streamPos++;
|
||||||
return stream.read();
|
return stream.read();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(byte[] b, int off, int len) throws IOException {
|
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
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user