blob: 524b9530ac5e4d8de7fffd916fdc655af7452a83 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.flex.swf.io;
import java.io.Closeable;
/**
* Read SWF primitive data types from a byte stream.
*/
interface IInputBitStream extends Closeable
{
/**
* Discard the data left in the bit value cache. Always call this method
* after reading bit values and before reading other byte-aligned data.
*/
void byteAlign();
/**
* Get the offset of the read cursor.
*
* @return offset
*/
long getOffset();
/**
* Set the read boundary. Reading beyond the boundary will raise exception.
* <p>
* The read boundary can move forward and backward. This is because
* DefineSprite has nested tags. The read boundary for a DefineSprite tag is
* at the end of all the nested tags, but it moves backwards when starting
* to read the nested ones.
*
* @param offset boundary offset to the beginning of the stream.
*/
void setReadBoundary(long offset);
/**
* Get the read boundary.
*
* @return read boundary
*/
long getReadBoundary();
/**
* Read all the bytes from the current position up to the read boundary.
* This is useful for reading SWF tags with variable length field at the
* end, like DoABC.
*
* @return byte array
*/
byte[] readToBoundary();
/**
* Read raw bytes.
*
* @param length number of bytes to read
* @return array of bytes
*/
byte[] read(int length);
/**
* Read 1-bit boolean value.
*
* @return boolean
*/
boolean readBit();
/**
* Read 64-bit floating-point number
*
* @return double
*/
double readDOUBLE();
/**
* Read encoded unsigned 32-bit integer
*
* @return integer
*/
long readEncodedU32();
/**
* Read fixed-point bit values. Fixed-point bit values are 32-bit 16.16
* signed, fixed-point numbers. That is, the high 16 bits represent the
* number before the decimal point, and the low 16 bits represent the number
* after the decimal point. A fixed-point bit value is identical to a
* signed-bit value, but the interpretation is different. For example, a
* 19-bit, signed-bit value of 0x30000 is interpreted as 196608 decimal. The
* 19-bit, fixed-point bit value 0x30000 is interpreted as 3.0. The format
* of this value is effectively 3.16 rather than 16.16.
*
* @param length number of bits to read
* @return integer
*/
float readFB(int length);
/**
* Read 32-bit 16.16 fixed point number.
*
* @return fixed point number
*/
float readFIXED();
/**
* Read 16-bit 8.8 fixed point number
*
* @return fixed point number
*/
float readFIXED8();
/**
* Read 32-bit floating-point number
*
* @return float
*/
float readFLOAT();
/**
* Read signed bit values.
*
* @param length number of bits to read
* @return integer
*/
int readSB(int length);
/**
* Read 16-bit signed integer.
*
* @return integer
*/
short readSI16();
/**
* Read 32-bit signed integer.
*
* @return integer
*/
int readSI32();
/**
* Read 64-bit signed integer.
*
* @return integer
*/
long readSI64();
/**
* Read 8-bit signed integer.
*
* @return integer
*/
byte readSI8();
/**
* Read string.
*
* @return string
*/
String readString();
/**
* Read unsigned bit values.
*
* @param length number of bits to read
* @return integer
*/
int readUB(int length);
/**
* Read 16-bit unsigned integer.
*
* @return integer
*/
int readUI16();
/**
* Read 24-bit unsigned integer.
*
* @return integer
*/
int readUI24();
/**
* Read 32-bit unsigned integer.
*
* @return integer
*/
long readUI32();
/**
* Read 8-bit unsigned integer.
*
* @return integer
*/
short readUI8();
}