package uk.co.mmscomputing.imageio.jpeg; import java.io.*; public class JPEGBitOutputStream extends FilterOutputStream{ private int bitBuffer; // entropy buffer; huffman coding private int bitCount; public JPEGBitOutputStream(OutputStream out){ super(out); bitCount=0; } public void writeBit(int code)throws IOException{ writeBits(code&0x01,1); } public void writeBits(int code,int size)throws IOException{ code&=~(-1<<size); bitCount+=size; bitBuffer|=code<<(32-bitCount); while(bitCount>=8) { int b=(bitBuffer>>>24)&0x000000FF; out.write(b); if(b==0x00FF){ // byte stuffing out.write(0x00); } bitBuffer<<=8; bitCount-=8; } } public void flush()throws IOException{ if(bitCount>0){ writeBits(-1,8-bitCount); } out.flush(); } }