1 18 19 package sync4j.framework.notification; 20 21 import java.io.*; 22 23 24 29 public class BitOutputStream { 30 31 private OutputStream out; 33 private int buffer; 34 private int bitCount = 7; 35 36 public BitOutputStream(OutputStream out) { 38 this.out = out; 39 } 40 41 synchronized public void writeBit(int bit) throws IOException { 43 if (out == null) 44 throw new IOException("Already closed"); 45 46 if (bit != 0 && bit != 1) { 47 throw new IOException(bit + " is not a bit"); 48 } 49 50 51 buffer |= bit << bitCount; 52 53 bitCount--; 54 55 if (bitCount == -1) { 56 flush(); 57 } 58 59 60 } 61 62 private void flush() throws IOException { 63 if (bitCount < 7) { 64 out.write( (byte)buffer); 65 bitCount = 7; 66 buffer = 0; 67 } 68 } 69 70 public void close() throws IOException { 71 flush(); 72 out.close(); 73 out = null; 74 } 75 } | Popular Tags |