/***
* Copyright 2002-2010 jamod development team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***/
package net.wimpi.modbus.io;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.IOException;
/**
* Class implementing a byte array input stream with
* a DataInput interface.
*
* @author Dieter Wimberger
* @version @version@ (@date@)
*/
public class BytesInputStream extends FastByteArrayInputStream implements DataInput {
DataInputStream m_Din;
/**
* Constructs a new <tt>BytesInputStream</tt> instance,
* with an empty buffer of a given size.
*
* @param size the size of the input buffer.
*/
public BytesInputStream(int size) {
super(new byte[size]);
m_Din = new DataInputStream(this);
}// BytesInputStream
/**
* Constructs a new <tt>BytesInputStream</tt> instance,
* that will read from the given data.
*
* @param data a byte array containing data to be read.
*/
public BytesInputStream(byte[] data) {
super(data);
m_Din = new DataInputStream(this);
}// BytesInputStream
/**
* Resets this <tt>BytesInputStream</tt> using the given
* byte[] as new input buffer.
*
* @param data a byte array with data to be read.
*/
public void reset(byte[] data) {
// System.out.println("reset(byte[])::count=" + count + " pos=" + pos);
pos = 0;
mark = 0;
buf = data;
count = data.length;
}// reset
/**
* Resets this <tt>BytesInputStream</tt> using the given
* byte[] as new input buffer and a given length.
*
* @param data a byte array with data to be read.
* @param length the length of the buffer to be considered.
*/
public void reset(byte[] data, int length) {
pos = 0;
mark = 0;
count = length;
buf = data;
readlimit = -1;
// System.out.println("reset(byte[],int)::count=" + count + " pos=" + pos);
}// reset
/**
* Resets this <tt>BytesInputStream</tt> assigning the input buffer
* a new length.
*
* @param length the length of the buffer to be considered.
*/
public void reset(int length) {
// System.out.println("reset(int)::count=" + count + " pos=" + pos);
pos = 0;
count = length;
}// reset
/**
* Skips the given number of bytes or all bytes till the end
* of the assigned input buffer length.
*
* @param n the number of bytes to be skipped as <tt>int</tt>.
* @return the number of bytes skipped.
*/
public int skip(int n) {
mark(pos);
pos += n;
return n;
}// skip
/**
* Returns the reference to the input buffer.
*
* @return the reference to the <tt>byte[]</tt> input buffer.
*/
@Override
public byte[] getBuffer() {
return buf;
}// getBuffer
public int getBufferLength() {
return buf.length;
}// getBufferLength
@Override
public void readFully(byte b[]) throws IOException {
m_Din.readFully(b);
}// readFully
@Override
public void readFully(byte b[], int off, int len) throws IOException {
m_Din.readFully(b, off, len);
}// readFully
@Override
public int skipBytes(int n) throws IOException {
return m_Din.skipBytes(n);
}// skipBytes
@Override
public boolean readBoolean() throws IOException {
return m_Din.readBoolean();
}// readBoolean
@Override
public byte readByte() throws IOException {
return m_Din.readByte();
}
@Override
public int readUnsignedByte() throws IOException {
return m_Din.readUnsignedByte();
}// readUnsignedByte
@Override
public short readShort() throws IOException {
return m_Din.readShort();
}// readShort
@Override
public int readUnsignedShort() throws IOException {
return m_Din.readUnsignedShort();
}// readUnsignedShort
@Override
public char readChar() throws IOException {
return m_Din.readChar();
}// readChar
@Override
public int readInt() throws IOException {
return m_Din.readInt();
}// readInt
@Override
public long readLong() throws IOException {
return m_Din.readLong();
}// readLong
// @commentstart@
@Override
public float readFloat() throws IOException {
return m_Din.readFloat();
}// readFloat
@Override
public double readDouble() throws IOException {
return m_Din.readDouble();
}// readDouble
// @commentend@
@Override
public String readLine() throws IOException {
throw new IOException("Not supported.");
}// readLine
@Override
public String readUTF() throws IOException {
return m_Din.readUTF();
}// readUTF
}// class BytesInputStream