sclass BitHead > ByteHead { int align; int currentByte; *() {} *(InputStream *inputStream) { readMode(true); } *(OutputStream *outputStream) { writeMode(true); } // slow version of write byte[] looping manually void write(byte[] data) { for (b : data) write(b); } void writeByte(int i) { if (align == 0) super.writeByte(i); else { currentByte |= i << align; super.writeByte(currentByte); currentByte = i >> (8-align); } } void writeBit(bool b) { if (b) currentByte |= 1 << align; if (align == 7) { super.writeByte(currentByte); currentByte = align = 0; } else ++align; } }