PairedTextEncodedStringNullTerminatedpublic class PairedTextEncodedStringNullTerminated extends AbstractDataType Represents a data type that allow multiple Strings but they should be paired as key values, i.e should be 2,4,6..
But keys are not unique so we don't store as a map, so could have same key pointing to two different values
such as two ENGINEER keys
|
Methods Summary |
---|
public boolean | canBeEncoded()Check the value can be encoded with the specified encoding
for (Pair entry : ((ValuePairs) value).mapping)
{
TextEncodedStringNullTerminated next = new TextEncodedStringNullTerminated(identifier, frameBody, entry.getValue());
if (!next.canBeEncoded())
{
return false;
}
}
return true;
| public boolean | equals(java.lang.Object obj)
if (obj == this)
{
return true;
}
if (!(obj instanceof PairedTextEncodedStringNullTerminated))
{
return false;
}
PairedTextEncodedStringNullTerminated that = (PairedTextEncodedStringNullTerminated) obj;
return EqualsUtil.areEqual(value, that.value);
| public int | getSize()Returns the size in bytes of this dataType when written to file
return size;
| public org.jaudiotagger.tag.datatype.PairedTextEncodedStringNullTerminated$ValuePairs | getValue()
return (ValuePairs) value;
| public void | readByteArray(byte[] arr, int offset)Read Null Terminated Strings from the array starting at offset, continue until unable to find any null terminated
Strings or until reached the end of the array. The offset should be set to byte after the last null terminated
String found.
logger.finer("Reading PairTextEncodedStringNullTerminated from array from offset:" + offset);
//Continue until unable to read a null terminated String
while (true)
{
try
{
//Read Key
TextEncodedStringNullTerminated key = new TextEncodedStringNullTerminated(identifier, frameBody);
key.readByteArray(arr, offset);
size += key.getSize();
offset += key.getSize();
if (key.getSize() == 0)
{
break;
}
try
{
//Read Value
TextEncodedStringNullTerminated result = new TextEncodedStringNullTerminated(identifier, frameBody);
result.readByteArray(arr, offset);
size += result.getSize();
offset += result.getSize();
if (result.getSize() == 0)
{
break;
}
//Add to value
((ValuePairs) value).add((String) key.getValue(),(String) result.getValue());
}
catch (InvalidDataTypeException idte)
{
//Value may not be null terminated if it is the last value
//Read Value
if(offset>=arr.length)
{
break;
}
TextEncodedStringSizeTerminated result = new TextEncodedStringSizeTerminated(identifier, frameBody);
result.readByteArray(arr, offset);
size += result.getSize();
offset += result.getSize();
if (result.getSize() == 0)
{
break;
}
//Add to value
((ValuePairs) value).add((String) key.getValue(),(String) result.getValue());
break;
}
}
catch (InvalidDataTypeException idte)
{
break;
}
if (size == 0)
{
logger.warning("No null terminated Strings found");
throw new InvalidDataTypeException("No null terminated Strings found");
}
}
logger.finer("Read PairTextEncodedStringNullTerminated:" + value + " size:" + size);
| public byte[] | writeByteArray()For every String write to byteBuffer
logger.finer("Writing PairTextEncodedStringNullTerminated");
int localSize = 0;
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
try
{
for (Pair pair : ((ValuePairs) value).mapping)
{
{
TextEncodedStringNullTerminated next = new TextEncodedStringNullTerminated(identifier, frameBody, pair.getKey());
buffer.write(next.writeByteArray());
localSize += next.getSize();
}
{
TextEncodedStringNullTerminated next = new TextEncodedStringNullTerminated(identifier, frameBody, pair.getValue());
buffer.write(next.writeByteArray());
localSize += next.getSize();
}
}
}
catch (IOException ioe)
{
//This should never happen because the write is internal with the JVM it is not to a file
logger.log(Level.SEVERE, "IOException in MultipleTextEncodedStringNullTerminated when writing byte array", ioe);
throw new RuntimeException(ioe);
}
//Update size member variable
size = localSize;
logger.finer("Written PairTextEncodedStringNullTerminated");
return buffer.toByteArray();
|
|