/**
  * Adds a String to the data. The String is broken up into its component chars and each is written
  * to the data.
  *
  * @param value The String to write.
  * @param characterWidth The width in bytes of each character.
  * @param withSeparator If this is true, a null separator is added to the end of the String in the
  *     data.
  */
 public void composeString(String value, int characterWidth, boolean withSeparator) {
   char[] stringChars = value.toCharArray();
   byte[] characterBytes = new byte[characterWidth];
   ByteHolder stringBytes = new ByteHolder(stringChars.length * characterWidth);
   for (char c : stringChars) {
     characterBytes = charToBytes(c, characterWidth);
     stringBytes.add(characterBytes);
   }
   composeBytes(stringBytes.toArray());
   if (withSeparator) {
     composeBytes(makeNullSeparator(characterWidth));
   }
 }
 /**
  * Adds an int to the data with a specified width.
  *
  * @param value The int to add.
  * @param width The width of the int.
  */
 public void composeInt(int value, int width) {
   composeBytes(intToBytes(value, width));
 }