org.jaudiotagger.tag.datatype
Class TextEncodedStringSizeTerminated

java.lang.Object
  extended by org.jaudiotagger.tag.datatype.AbstractDataType
      extended by org.jaudiotagger.tag.datatype.AbstractString
          extended by org.jaudiotagger.tag.datatype.TextEncodedStringSizeTerminated
Direct Known Subclasses:
StringSizeTerminated

public class TextEncodedStringSizeTerminated
extends AbstractString

Represents a String which is not delimited by null character.

This type of String will usually only be used when it is the last field within a frame, when reading the remainder of the byte array will be read, when writing the frame will be accomodate the required size for the String. The String will be encoded based upon the text encoding of the frame that it belongs to.

All TextInformation frames support multiple strings, stored as a null separated list, where null is represented by the termination code for the character encoding. This functionality is only officially support in ID3v24. Itunes write null terminators characters after the String even though it only writes a single value.


Field Summary
 
Fields inherited from class org.jaudiotagger.tag.datatype.AbstractDataType
frameBody, identifier, logger, size, TYPE_ELEMENT, value
 
Constructor Summary
TextEncodedStringSizeTerminated(java.lang.String identifier, AbstractTagFrameBody frameBody)
          Creates a new empty TextEncodedStringSizeTerminated datatype.
TextEncodedStringSizeTerminated(TextEncodedStringSizeTerminated object)
          Copy constructor
 
Method Summary
 void addValue(java.lang.String value)
          Add an additional String to the current String value
 boolean equals(java.lang.Object obj)
           
 int getNumberOfValues()
          How many values are held, each value is seperated by a null terminator
protected  java.lang.String getTextEncodingCharSet()
          Get the text encoding being used.
 java.lang.String getValueAtIndex(int index)
          Get the nth value
 void readByteArray(byte[] arr, int offset)
          Read a 'n' bytes from buffer into a String where n is the framesize - offset so thefore cannot use this if there are other objects after it because it has no delimiter.
private static java.util.List splitByNullSeperator(java.lang.String value)
          Split the values seperated by null character
 byte[] writeByteArray()
          Write String into byte array

It will remove a trailing null terminator if exists if the option RemoveTrailingTerminatorOnWrite has been set.

 
Methods inherited from class org.jaudiotagger.tag.datatype.AbstractString
canBeEncoded, getSize, setSize, toString
 
Methods inherited from class org.jaudiotagger.tag.datatype.AbstractDataType
createStructure, getBody, getIdentifier, getValue, readByteArray, setBody, setValue
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TextEncodedStringSizeTerminated

public TextEncodedStringSizeTerminated(java.lang.String identifier,
                                       AbstractTagFrameBody frameBody)
Creates a new empty TextEncodedStringSizeTerminated datatype.

Parameters:
identifier - identifies the frame type
frameBody -

TextEncodedStringSizeTerminated

public TextEncodedStringSizeTerminated(TextEncodedStringSizeTerminated object)
Copy constructor

Parameters:
object -
Method Detail

equals

public boolean equals(java.lang.Object obj)
Overrides:
equals in class AbstractDataType
Returns:
whether this and obj are deemed equivalent

readByteArray

public void readByteArray(byte[] arr,
                          int offset)
                   throws InvalidDataTypeException
Read a 'n' bytes from buffer into a String where n is the framesize - offset so thefore cannot use this if there are other objects after it because it has no delimiter.

Must take into account the text encoding defined in the Encoding Object ID3 Text Frames often allow multiple strings seperated by the null char appropriate for the encoding.

Specified by:
readByteArray in class AbstractDataType
Parameters:
arr - this is the buffer for the frame
offset - this is where to start reading in the buffer for this field
Throws:
java.lang.NullPointerException
java.lang.IndexOutOfBoundsException
InvalidDataTypeException

writeByteArray

public byte[] writeByteArray()
Write String into byte array

It will remove a trailing null terminator if exists if the option RemoveTrailingTerminatorOnWrite has been set.

Specified by:
writeByteArray in class AbstractDataType
Returns:
the data as a byte array in format to write to file

getTextEncodingCharSet

protected java.lang.String getTextEncodingCharSet()
Get the text encoding being used.

The text encoding is defined by the frame body that the text field belongs to.

Returns:
the text encoding charset

splitByNullSeperator

private static java.util.List splitByNullSeperator(java.lang.String value)
Split the values seperated by null character

Parameters:
value - the raw value
Returns:
list of values, guaranteed to be at least one value

addValue

public void addValue(java.lang.String value)
Add an additional String to the current String value

Parameters:
value -

getNumberOfValues

public int getNumberOfValues()
How many values are held, each value is seperated by a null terminator

Returns:
number of values held, usually this will be one.

getValueAtIndex

public java.lang.String getValueAtIndex(int index)
Get the nth value

Parameters:
index -
Returns:
the nth value
Throws:
java.lang.IndexOutOfBoundsException - if value does not exist