public void write(final int b) throws IOException {
  if (m_store == null) {
    throw new IllegalStateException(ERR_NO_STORE);
  }
  if (m_isSaved) {
    throw new IllegalStateException(ERR_ALREADY_SAVED);
  }
  if (m_count == m_blobThreshold && !m_writingHdr) {
    if (m_blobHeader == null) {
      m_blobHeader=new ArrayList<Integer>();
    }
    final int curAddr=(int)m_store.alloc(m_buf,m_count,m_context);
    m_blobHeader.add(curAddr);
    m_count=0;
  }
  m_buf[m_count++]=(byte)b;
  m_bytesWritten++;
}

public void write ( final int b ) throws IOException { if ( m_store == null ) { throw new IllegalStateException ( ERR_NO_STORE ) ; } if ( m_isSaved ) { throw new IllegalStateException ( ERR_ALREADY_SAVED ) ; } if ( m_count == m_blobThreshold && ! m_writingHdr ) { if ( m_blobHeader == null ) { m_blobHeader = new ArrayList < Integer > ( ) ; } final int curAddr = ( int ) m_store . alloc ( m_buf , m_count , m_context ) ; m_blobHeader . add ( curAddr ) ; m_count = 0 ; } m_buf [ m_count ++ ] = ( byte ) b ; m_bytesWritten ++ ; }
write a single byte this is the one place where the blob threshold is handled and its done one byte at a time so should be easy enough , we no longer store continuation addresses , instead we allocate blob allocations via a blob header block .
