001/* 002 * $RCSfile: RandomAccessIO.java,v $ 003 * $Revision: 1.1 $ 004 * $Date: 2005/02/11 05:02:16 $ 005 * $State: Exp $ 006 * 007 * Interface: RandomAccessIO.java 008 * 009 * Description: Interface definition for random access I/O. 010 * 011 * 012 * 013 * COPYRIGHT: 014 * 015 * This software module was originally developed by Raphaël Grosbois and 016 * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel 017 * Askelöf (Ericsson Radio Systems AB); and Bertrand Berthelot, David 018 * Bouchard, Félix Henry, Gerard Mozelle and Patrice Onno (Canon Research 019 * Centre France S.A) in the course of development of the JPEG2000 020 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This 021 * software module is an implementation of a part of the JPEG 2000 022 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio 023 * Systems AB and Canon Research Centre France S.A (collectively JJ2000 024 * Partners) agree not to assert against ISO/IEC and users of the JPEG 025 * 2000 Standard (Users) any of their rights under the copyright, not 026 * including other intellectual property rights, for this software module 027 * with respect to the usage by ISO/IEC and Users of this software module 028 * or modifications thereof for use in hardware or software products 029 * claiming conformance to the JPEG 2000 Standard. Those intending to use 030 * this software module in hardware or software products are advised that 031 * their use may infringe existing patents. The original developers of 032 * this software module, JJ2000 Partners and ISO/IEC assume no liability 033 * for use of this software module or modifications thereof. No license 034 * or right to this software module is granted for non JPEG 2000 Standard 035 * conforming products. JJ2000 Partners have full right to use this 036 * software module for his/her own purpose, assign or donate this 037 * software module to any third party and to inhibit third parties from 038 * using this software module for non JPEG 2000 Standard conforming 039 * products. This copyright notice must be included in all copies or 040 * derivative works of this software module. 041 * 042 * Copyright (c) 1999/2000 JJ2000 Partners. 043 */ 044 045package jj2000.j2k.io; 046 047import java.io.*; 048 049/** 050 * This abstract class defines the interface to perform random access I/O. It 051 * implements the <tt>BinaryDataInput</tt> and <tt>BinaryDataOutput</tt> 052 * interfaces so that binary data input/output can be performed. 053 * 054 * <P>This interface supports streams of up to 2 GB in length. 055 * 056 * @see BinaryDataInput 057 * @see BinaryDataOutput 058 * */ 059public interface RandomAccessIO 060 extends BinaryDataInput, BinaryDataOutput { 061 062 /** 063 * Closes the I/O stream. Prior to closing the stream, any buffered data 064 * (at the bit and byte level) should be written. 065 * 066 * @exception IOException If an I/O error ocurred. 067 * */ 068 public void close() throws IOException; 069 070 /** 071 * Returns the current position in the stream, which is the position from 072 * where the next byte of data would be read. The first byte in the stream 073 * is in position <tt>0</tt>. 074 * 075 * @return The offset of the current position, in bytes. 076 * 077 * @exception IOException If an I/O error ocurred. 078 * */ 079 public int getPos() throws IOException; 080 081 /** 082 * Returns the current length of the stream, in bytes, taking into account 083 * any buffering. 084 * 085 * @return The length of the stream, in bytes. 086 * 087 * @exception IOException If an I/O error ocurred. 088 * */ 089 public int length() throws IOException; 090 091 /** 092 * Moves the current position for the next read or write operation to 093 * offset. The offset is measured from the beginning of the stream. The 094 * offset may be set beyond the end of the file, if in write mode. Setting 095 * the offset beyond the end of the file does not change the file 096 * length. The file length will change only by writing after the offset 097 * has been set beyond the end of the file. 098 * 099 * @param off The offset where to move to. 100 * 101 * @exception EOFException If in read-only and seeking beyond EOF. 102 * 103 * @exception IOException If an I/O error ocurred. 104 * */ 105 public void seek(int off) throws IOException; 106 107 /** 108 * Reads a byte of data from the stream. Prior to reading, the stream is 109 * realigned at the byte level. 110 * 111 * @return The byte read, as an int. 112 * 113 * @exception EOFException If the end-of file was reached. 114 * 115 * @exception IOException If an I/O error ocurred. 116 * */ 117 public int read() throws EOFException, IOException; 118 119 /** 120 * Reads up to len bytes of data from this file into an array of 121 * bytes. This method reads repeatedly from the stream until all the bytes 122 * are read. This method blocks until all the bytes are read, the end of 123 * the stream is detected, or an exception is thrown. 124 * 125 * @param b The buffer into which the data is to be read. It must be long 126 * enough. 127 * 128 * @param off The index in 'b' where to place the first byte read. 129 * 130 * @param len The number of bytes to read. 131 * 132 * @exception EOFException If the end-of file was reached before 133 * getting all the necessary data. 134 * 135 * @exception IOException If an I/O error ocurred. 136 * */ 137 public void readFully(byte b[], int off, int len) throws IOException; 138 139 /** 140 * Writes a byte to the stream. Prior to writing, the stream is realigned 141 * at the byte level. 142 * 143 * @param b The byte to write. The lower 8 bits of <tt>b</tt> are 144 * written. 145 * 146 * @exception IOException If an I/O error ocurred. 147 * */ 148 public void write(int b) throws IOException; 149}