code: public byte[] to_bytes()
  	{
  		byte[] header_bytes = get_header_bytes();
  		byte[] annotations_bytes = get_annotations_bytes();
  		byte[] result = new byte[header_bytes.length + annotations_bytes.length + data.length];
  		System.arraycopy(header_bytes, 0, result, 0, header_bytes.length);
  		System.arraycopy(annotations_bytes, 0, result, header_bytes.length, annotations_bytes.length);
  		System.arraycopy(data, 0, result, header_bytes.length+annotations_bytes.length, data.length);
  		return result;
  	}
docs: creates a byte stream containing the header followed by annotations (if any) followed by the data