FileDocCategorySizeDatePackage
AbstractLyrics3v2FieldFrameBody.javaAPI DocJaudiotagger 2.0.45528Wed Mar 30 16:12:08 BST 2011org.jaudiotagger.tag.lyrics3

AbstractLyrics3v2FieldFrameBody

public abstract class AbstractLyrics3v2FieldFrameBody extends org.jaudiotagger.tag.id3.AbstractTagFrameBody
author
: Paul Taylor
author
: Eric Farng Version @version:$Id: AbstractLyrics3v2FieldFrameBody.java 836 2009-11-12 15:44:07Z paultaylor $ MusicTag Copyright (C)2003,2004 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, you can get a copy from http://www.opensource.org/licenses/lgpl-license.php or write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Description:

Fields Summary
Constructors Summary
public AbstractLyrics3v2FieldFrameBody()

    
public AbstractLyrics3v2FieldFrameBody(AbstractLyrics3v2FieldFrameBody copyObject)

        super(copyObject);
    
Methods Summary
public voidread(java.nio.ByteBuffer byteBuffer)
This reads a frame body from its file into the appropriate FrameBody class Read the data from the given file into this datatype. The file needs to have its file pointer in the correct location. The size as indicated in the header is passed to the frame constructor when reading from file.

param
byteBuffer file to read
throws
IOException on any I/O error
throws
InvalidTagException if there is any error in the data format.

        int size = getSize();
        //Allocate a buffer to the size of the Frame Body and read from file
        byte[] buffer = new byte[size];
        byteBuffer.get(buffer);
        //Offset into buffer, incremented by length of previous MP3Object
        int offset = 0;

        //Go through the ObjectList of the Frame reading the data into the
        //correct datatype.
        AbstractDataType object;
        Iterator<AbstractDataType> iterator = objectList.listIterator();
        while (iterator.hasNext())
        {
            //The read has extended further than the defined frame size
            if (offset > (size - 1))
            {
                throw new InvalidTagException("Invalid size for Frame Body");
            }

            //Get next Object and load it with data from the Buffer
            object = iterator.next();
            object.readByteArray(buffer, offset);
            //Increment Offset to start of next datatype.
            offset += object.getSize();
        }
    
protected intreadHeader(java.io.RandomAccessFile file)
This is called by superclass when attempt to read data from file.

param
file
return
throws
InvalidTagException
throws
IOException

        int size;
        byte[] buffer = new byte[5];

        // read the 5 character size
        file.read(buffer, 0, 5);
        size = Integer.parseInt(new String(buffer, 0, 5));

        if ((size == 0) && (!TagOptionSingleton.getInstance().isLyrics3KeepEmptyFieldIfRead()))
        {
            throw new InvalidTagException("Lyircs3v2 Field has size of zero.");
        }

        return size;
    
public voidwrite(java.io.RandomAccessFile file)
Write the contents of this datatype to the file at the position it is currently at.

param
file destination file
throws
IOException on any I/O error

        //Write the various fields to file in order
        byte[] buffer;
        AbstractDataType object;
        Iterator<AbstractDataType> iterator = objectList.listIterator();
        while (iterator.hasNext())
        {
            object = iterator.next();
            buffer = object.writeByteArray();
            file.write(buffer);
        }
    
protected voidwriteHeader(java.io.RandomAccessFile file, int size)
This is called by superclass when attempt to write data from file.

param
file
param
size
throws
IOException

        String str;
        int offset = 0;
        byte[] buffer = new byte[5];

        /**
         * @todo change this to use pad String
         */
        str = Integer.toString(getSize());

        for (int i = 0; i < (5 - str.length()); i++)
        {
            buffer[i] = (byte) '0";
        }

        offset += (5 - str.length());

        for (int i = 0; i < str.length(); i++)
        {
            buffer[i + offset] = (byte) str.charAt(i);
        }

        file.write(buffer);