/** * Copyright 2000-2009 DFKI GmbH. * All Rights Reserved. Use is subject to license terms. * * This file is part of MARY TTS. * * MARY TTS 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, version 3 of the License. * * This program 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 program. If not, see <http://www.gnu.org/licenses/>. * */ package marytts.util.io; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; /** * A class that extends RandomAccessFile to read/write arrays of different types while allowing random access to a binary file * (i.e. the file can be opened in both read/write mode and there is support for moving the file pointer to any location as * required * * @author Oytun Türk */ public final class MaryRandomAccessFile extends RandomAccessFile { public MaryRandomAccessFile(File arg0, String arg1) throws FileNotFoundException { super(arg0, arg1); } public MaryRandomAccessFile(String arg0, String arg1) throws FileNotFoundException { super(arg0, arg1); } public final boolean readBooleanEndian() throws IOException { boolean ret = readBoolean(); return ret; } public final boolean[] readBoolean(int len) throws IOException { boolean[] ret = new boolean[len]; for (int i = 0; i < len; i++) ret[i] = readBoolean(); return ret; } public final boolean[] readBooleanEndian(int len) throws IOException { boolean[] ret = new boolean[len]; for (int i = 0; i < len; i++) ret[i] = readBooleanEndian(); return ret; } public final byte readByteEndian() throws IOException { byte ret = readByte(); return ret; } public final byte[] readByte(int len) throws IOException { byte[] ret = new byte[len]; for (int i = 0; i < len; i++) ret[i] = readByte(); return ret; } public final byte[] readByteEndian(int len) throws IOException { byte[] ret = new byte[len]; for (int i = 0; i < len; i++) ret[i] = readByteEndian(); return ret; } public final char readCharEndian() throws IOException { char c = (char) readByte(); return c; } public final char[] readChar(int len) throws IOException { char[] ret = new char[len]; for (int i = 0; i < len; i++) ret[i] = readChar(); return ret; } public final char[] readCharEndian(int len) throws IOException { char[] ret = new char[len]; for (int i = 0; i < len; i++) ret[i] = readCharEndian(); return ret; } public final double readDoubleEndian() throws IOException { double ret = readDouble(); return ret; } public final double[] readDouble(int len) throws IOException { double[] ret = new double[len]; for (int i = 0; i < len; i++) ret[i] = readDouble(); return ret; } public final double[] readDoubleEndian(int len) throws IOException { double[] ret = new double[len]; for (int i = 0; i < len; i++) ret[i] = readDoubleEndian(); return ret; } public final int readDoubleToIntEndian() throws IOException { int ret = (int) readDouble(); return ret; } public final int[] readDoubleToInt(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = (int) readDouble(); return ret; } public final int[] readDoubleToIntEndian(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = readDoubleToIntEndian(); return ret; } public final float readFloatEndian() throws IOException { float ret = readFloat(); return ret; } public final float[] readFloat(int len) throws IOException { float[] ret = new float[len]; for (int i = 0; i < len; i++) ret[i] = readFloat(); return ret; } public final float[] readFloatEndian(int len) throws IOException { float[] ret = new float[len]; for (int i = 0; i < len; i++) ret[i] = readFloatEndian(); return ret; } public final int readIntEndian() throws IOException { int ret = readInt(); return ret; } public final int[] readInt(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = readInt(); return ret; } public final int[] readIntEndian(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = readIntEndian(); return ret; } public final long readLongEndian() throws IOException { long ret = (long) readInt(); return ret; } public final long[] readLong(int len) throws IOException { long[] ret = new long[len]; for (int i = 0; i < len; i++) ret[i] = readLong(); return ret; } public final long[] readLongEndian(int len) throws IOException { long[] ret = new long[len]; for (int i = 0; i < len; i++) ret[i] = readLongEndian(); return ret; } public final short readShortEndian() throws IOException { short ret = readShort(); return ret; } public final short[] readShort(int len) throws IOException { short[] ret = new short[len]; for (int i = 0; i < len; i++) ret[i] = readShort(); return ret; } public final short[] readShortEndian(int len) throws IOException { short[] ret = new short[len]; for (int i = 0; i < len; i++) ret[i] = readShortEndian(); return ret; } public final int readUnsignedByteEndian() throws IOException { int ret = readUnsignedByte(); return ret; } public final int[] readUnsignedByte(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = readUnsignedByte(); return ret; } public final int[] readUnsignedByteEndian(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = readUnsignedByteEndian(); return ret; } public final int readUnsignedShortEndian() throws IOException { int ret = readUnsignedShort(); return ret; } public final int[] readUnsignedShort(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = readUnsignedShort(); return ret; } public final int[] readUnsignedShortEndian(int len) throws IOException { int[] ret = new int[len]; for (int i = 0; i < len; i++) ret[i] = readUnsignedShortEndian(); return ret; } public final void writeBooleanEndian(boolean v) throws IOException { writeBoolean(v); } public final void writeBoolean(boolean[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeBoolean(v[i]); } public final void writeBooleanEndian(boolean[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeBooleanEndian(v[i]); } public final void writeBoolean(boolean[] v) throws IOException { writeBoolean(v, 0, v.length); } public final void writeBooleanEndian(boolean[] v) throws IOException { writeBooleanEndian(v, 0, v.length); } public final void writeByteEndian(byte v) throws IOException { writeByte(v); } public final void writeByte(byte[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeByte(v[i]); } public final void writeByteEndian(byte[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeByteEndian(v[i]); } public final void writeByte(byte[] v) throws IOException { writeByte(v, 0, v.length); } public final void writeByteEndian(byte[] v) throws IOException { writeByteEndian(v, 0, v.length); } public final void writeCharEndian(char c) throws IOException { writeByte((byte) c); } public final void writeChar(char[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeChar(v[i]); } public final void writeCharEndian(char[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeCharEndian(v[i]); } public final void writeChar(char[] v) throws IOException { writeChar(v, 0, v.length); } public final void writeCharEndian(char[] v) throws IOException { writeCharEndian(v, 0, v.length); } public final void writeDoubleEndian(double v) throws IOException { writeDouble(v); } public final void writeDouble(double[] v, int startPos, int len) throws IOException { for (int i = startPos; i < startPos + len; i++) writeDouble(v[i]); } public final void writeDoubleEndian(double[] v, int startPos, int len) throws IOException { for (int i = startPos; i < startPos + len; i++) writeDoubleEndian(v[i]); } public final void writeDouble(double[] v) throws IOException { writeDouble(v, 0, v.length); } public final void writeDoubleEndian(double[] v) throws IOException { writeDoubleEndian(v, 0, v.length); } public final void writeFloatEndian(float v) throws IOException { writeFloat(v); } public final void writeFloat(float[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeFloat(v[i]); } public final void writeFloatEndian(float[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeFloatEndian(v[i]); } public final void writeFloat(float[] v) throws IOException { writeFloat(v, 0, v.length); } public final void writeFloatEndian(float[] v) throws IOException { writeFloatEndian(v, 0, v.length); } public final void writeIntEndian(int v) throws IOException { writeInt(v); } public final void writeInt(int[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeInt(v[i]); } public final void writeIntEndian(int[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeIntEndian(v[i]); } public final void writeInt(int[] v) throws IOException { writeInt(v, 0, v.length); } public final void writeIntEndian(int[] v) throws IOException { writeIntEndian(v, 0, v.length); } public final void writeLongEndian(long v) throws IOException { writeInt((int) v); } public final void writeLong(long[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeLong(v[i]); } public final void writeLongEndian(long[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeLongEndian(v[i]); } public final void writeLong(long[] v) throws IOException { writeLong(v, 0, v.length); } public final void writeLongEndian(long[] v) throws IOException { writeLongEndian(v, 0, v.length); } public final void writeShortEndian(short v) throws IOException { writeShort(v); } public final void writeShort(short[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeShort(v[i]); } public final void writeShortEndian(short[] v, int startPos, int len) throws IOException { assert v.length < startPos + len; for (int i = startPos; i < startPos + len; i++) writeShortEndian(v[i]); } public final void writeShort(short[] v) throws IOException { writeShort(v, 0, v.length); } public final void writeShortEndian(short[] v) throws IOException { writeShort(v); } }