content: package cloudBurst;
  
  import org.apache.hadoop.io.BytesWritable;
  import java.io.IOException;
  
  public class FastaRecord 
  {	
  	public byte[]   m_sequence = null;
  	public boolean  m_lastChunk = false;
  	public int      m_offset = 0;
  	
  	private static final StringBuilder builder = new StringBuilder();
  	
  	FastaRecord()
  	{
  
  	}
  	
  	FastaRecord(BytesWritable t) throws IOException
  	{
  		fromBytes(t);
  	}
  	
  	public String toString()
  	{
  		builder.setLength(0);
  		
  		builder.append(m_lastChunk?1:0);                      builder.append('\t');
  		builder.append(m_offset);		                      builder.append('\t');
  		builder.append(DNAString.bytesToString(m_sequence));
  		
  		return builder.toString();
  	}
  	
  	public BytesWritable toBytes()
  	{
  		byte [] dna = DNAString.arrToDNA(m_sequence);
  		
  		int len = 1 + // lastChunk
  		          4 + // offset
  		          dna.length;
  		
  		byte [] buf = new byte[len];
  		
  		buf[0] = (byte) (m_lastChunk ? 1 : 0);
  		
  		buf[1] = (byte) ((m_offset & 0xFF000000) >> 24);
  		buf[2] = (byte) ((m_offset & 0x00FF0000) >> 16);
  		buf[3] = (byte) ((m_offset & 0x0000FF00) >> 8);
  		buf[4] = (byte) ((m_offset & 0x000000FF));
  		
  		System.arraycopy(dna, 0, buf, 5, dna.length);
  		
  		return new BytesWritable(buf);
  	}
  
  	
  	public void fromBytes(BytesWritable t)
  	{
  		byte [] raw = t.get();
  		int rawlen = t.getSize();
  		
  		m_lastChunk   = raw[0] == 1;
  		
  		m_offset =   (raw[1] & 0xFF) << 24 
  		           | (raw[2] & 0xFF) << 16
  		           | (raw[3] & 0xFF) << 8
  		           | (raw[4] & 0xFF);
  		
  		int sl = rawlen - 5;
  		m_sequence = DNAString.dnaToArr(raw, 5, sl);
  	}
  	
  	public static void main(String[] args) throws IOException 
  	{
  		Timer t = new Timer();
  		int num = 100000;
  		
  		for (int i = 0; i < num; i++)
  		{
  			FastaRecord record = new FastaRecord();
  			
  			record.m_lastChunk = false;
  			record.m_offset = 123456;
  			record.m_sequence = DNAString.stringToBytes("ACGTACGTA");
  			
  			BytesWritable bw = record.toBytes();
  			
  			FastaRecord record2 = new FastaRecord(bw);
  			
  			if (record.m_lastChunk   != record2.m_lastChunk ||
  			    record.m_offset      != record2.m_offset ||
  			    DNAString.bytesToString(record.m_sequence).compareTo(DNAString.bytesToString(record2.m_sequence)) != 0)
  			{
  				throw new IOException("Mismatch\norg: " + record.toString() + "\nnew: " + record2.toString());
  			}			
  		}
  		
  		System.out.println(num + " took:" + t.get());
  	}
  }
  