001/* 002 * $RCSfile: BinaryDataOutput.java,v $ 003 * $Revision: 1.1 $ 004 * $Date: 2005/02/11 05:02:15 $ 005 * $State: Exp $ 006 * 007 * Interface: BinaryDataOutput 008 * 009 * Description: Stream like interface for bit as well as byte 010 * level output to a stream or file. 011 * 012 * 013 * 014 * COPYRIGHT: 015 * 016 * This software module was originally developed by Raphaël Grosbois and 017 * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel 018 * Askelöf (Ericsson Radio Systems AB); and Bertrand Berthelot, David 019 * Bouchard, Félix Henry, Gerard Mozelle and Patrice Onno (Canon Research 020 * Centre France S.A) in the course of development of the JPEG2000 021 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This 022 * software module is an implementation of a part of the JPEG 2000 023 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio 024 * Systems AB and Canon Research Centre France S.A (collectively JJ2000 025 * Partners) agree not to assert against ISO/IEC and users of the JPEG 026 * 2000 Standard (Users) any of their rights under the copyright, not 027 * including other intellectual property rights, for this software module 028 * with respect to the usage by ISO/IEC and Users of this software module 029 * or modifications thereof for use in hardware or software products 030 * claiming conformance to the JPEG 2000 Standard. Those intending to use 031 * this software module in hardware or software products are advised that 032 * their use may infringe existing patents. The original developers of 033 * this software module, JJ2000 Partners and ISO/IEC assume no liability 034 * for use of this software module or modifications thereof. No license 035 * or right to this software module is granted for non JPEG 2000 Standard 036 * conforming products. JJ2000 Partners have full right to use this 037 * software module for his/her own purpose, assign or donate this 038 * software module to any third party and to inhibit third parties from 039 * using this software module for non JPEG 2000 Standard conforming 040 * products. This copyright notice must be included in all copies or 041 * derivative works of this software module. 042 * 043 * Copyright (c) 1999/2000 JJ2000 Partners. 044 * 045 * 046 * 047 */ 048 049package jj2000.j2k.io; 050 051import java.io.*; 052 053/** 054 * This interface defines the output of binary data to streams and/or files. 055 * 056 * <P>Byte level output (i.e., for byte, int, long, float, etc.) should 057 * always be byte aligned. For example, a request to write an 058 * <tt>int</tt> should always realign the output at the byte level. 059 * 060 * <P>The implementation of this interface should clearly define if 061 * multi-byte output data is written in little- or big-endian byte 062 * ordering (least significant byte first or most significant byte 063 * first, respectively). 064 * 065 * @see EndianType 066 * */ 067public interface BinaryDataOutput { 068 069 /** 070 * Should write the byte value of <tt>v</tt> (i.e., 8 least 071 * significant bits) to the output. Prior to writing, the output 072 * should be realigned at the byte level. 073 * 074 * <P>Signed or unsigned data can be written. To write a signed 075 * value just pass the <tt>byte</tt> value as an argument. To 076 * write unsigned data pass the <tt>int</tt> value as an argument 077 * (it will be automatically casted, and only the 8 least 078 * significant bits will be written). 079 * 080 * @param v The value to write to the output 081 * 082 * @exception IOException If an I/O error ocurred. 083 * 084 * 085 * 086 */ 087 public void writeByte(int v) throws IOException; 088 089 /** 090 * Should write the short value of <tt>v</tt> (i.e., 16 least 091 * significant bits) to the output. Prior to writing, the output 092 * should be realigned at the byte level. 093 * 094 * <P>Signed or unsigned data can be written. To write a signed 095 * value just pass the <tt>short</tt> value as an argument. To 096 * write unsigned data pass the <tt>int</tt> value as an argument 097 * (it will be automatically casted, and only the 16 least 098 * significant bits will be written). 099 * 100 * @param v The value to write to the output 101 * 102 * @exception IOException If an I/O error ocurred. 103 * 104 * 105 * 106 */ 107 public void writeShort(int v) throws IOException; 108 109 /** 110 * Should write the int value of <tt>v</tt> (i.e., the 32 bits) to 111 * the output. Prior to writing, the output should be realigned at 112 * the byte level. 113 * 114 * @param v The value to write to the output 115 * 116 * @exception IOException If an I/O error ocurred. 117 * 118 * 119 * 120 */ 121 public void writeInt(int v) throws IOException; 122 123 /** 124 * Should write the long value of <tt>v</tt> (i.e., the 64 bits) 125 * to the output. Prior to writing, the output should be realigned 126 * at the byte level. 127 * 128 * @param v The value to write to the output 129 * 130 * @exception IOException If an I/O error ocurred. 131 * 132 * 133 * 134 */ 135 public void writeLong(long v) throws IOException; 136 137 /** 138 * Should write the IEEE float value <tt>v</tt> (i.e., 32 bits) to 139 * the output. Prior to writing, the output should be realigned at 140 * the byte level. 141 * 142 * @param v The value to write to the output 143 * 144 * @exception IOException If an I/O error ocurred. 145 * 146 * 147 * 148 */ 149 public void writeFloat(float v) throws IOException; 150 151 /** 152 * Should write the IEEE double value <tt>v</tt> (i.e., 64 bits) 153 * to the output. Prior to writing, the output should be realigned 154 * at the byte level. 155 * 156 * @param v The value to write to the output 157 * 158 * @exception IOException If an I/O error ocurred. 159 * 160 * 161 * 162 */ 163 public void writeDouble(double v) throws IOException; 164 165 /** 166 * Returns the endianness (i.e., byte ordering) of the implementing 167 * class. Note that an implementing class may implement only one 168 * type of endianness or both, which would be decided at creatiuon 169 * time. 170 * 171 * @return Either <tt>EndianType.BIG_ENDIAN</tt> or 172 * <tt>EndianType.LITTLE_ENDIAN</tt> 173 * 174 * @see EndianType 175 * 176 * 177 * 178 */ 179 public int getByteOrdering(); 180 181 /** 182 * Any data that has been buffered must be written, and the stream should 183 * be realigned at the byte level. 184 * 185 * @exception IOException If an I/O error ocurred. 186 * 187 * 188 * */ 189 public void flush() throws IOException; 190}