| |
| /* ==================================================================== |
| 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.poi.util; |
| |
| import org.apache.poi.util.LittleEndian.BufferUnderrunException; |
| |
| import java.io.*; |
| |
| /** |
| * representation of an integer (32-bit) field at a fixed location |
| * within a byte array |
| * |
| * @author Marc Johnson (mjohnson at apache dot org |
| */ |
| |
| public class IntegerField |
| implements FixedField |
| { |
| private int _value; |
| private final int _offset; |
| |
| /** |
| * construct the IntegerField with its offset into its containing |
| * byte array |
| * |
| * @param offset of the field within its byte array |
| * |
| * @exception ArrayIndexOutOfBoundsException if the offset is |
| * negative |
| */ |
| |
| public IntegerField(final int offset) |
| throws ArrayIndexOutOfBoundsException |
| { |
| if (offset < 0) |
| { |
| throw new ArrayIndexOutOfBoundsException("negative offset"); |
| } |
| _offset = offset; |
| } |
| |
| /** |
| * construct the IntegerField with its offset into its containing |
| * byte array and initialize its value |
| * |
| * @param offset of the field within its byte array |
| * @param value the initial value |
| * |
| * @exception ArrayIndexOutOfBoundsException if the offset is |
| * negative |
| */ |
| |
| public IntegerField(final int offset, final int value) |
| throws ArrayIndexOutOfBoundsException |
| { |
| this(offset); |
| set(value); |
| } |
| |
| /** |
| * Construct the IntegerField with its offset into its containing |
| * byte array and initialize its value from its byte array |
| * |
| * @param offset of the field within its byte array |
| * @param data the byte array to read the value from |
| * |
| * @exception ArrayIndexOutOfBoundsException if the offset is not |
| * within the range of 0..(data.length - 1) |
| */ |
| |
| public IntegerField(final int offset, final byte [] data) |
| throws ArrayIndexOutOfBoundsException |
| { |
| this(offset); |
| readFromBytes(data); |
| } |
| |
| /** |
| * construct the IntegerField with its offset into its containing |
| * byte array, initialize its value, and write the value to a byte |
| * array |
| * |
| * @param offset of the field within its byte array |
| * @param value the initial value |
| * @param data the byte array to write the value to |
| * |
| * @exception ArrayIndexOutOfBoundsException if the offset is |
| * negative or too large |
| */ |
| |
| public IntegerField(final int offset, final int value, final byte [] data) |
| throws ArrayIndexOutOfBoundsException |
| { |
| this(offset); |
| set(value, data); |
| } |
| |
| /** |
| * get the IntegerField's current value |
| * |
| * @return current value |
| */ |
| |
| public int get() |
| { |
| return _value; |
| } |
| |
| /** |
| * set the IntegerField's current value |
| * |
| * @param value to be set |
| */ |
| |
| public void set(final int value) |
| { |
| _value = value; |
| } |
| |
| /** |
| * set the IntegerField's current value and write it to a byte |
| * array |
| * |
| * @param value to be set |
| * @param data the byte array to write the value to |
| * |
| * @exception ArrayIndexOutOfBoundsException if the offset is too |
| * large |
| */ |
| |
| public void set(final int value, final byte [] data) |
| throws ArrayIndexOutOfBoundsException |
| { |
| _value = value; |
| writeToBytes(data); |
| } |
| |
| /* ********** START implementation of FixedField ********** */ |
| |
| /** |
| * set the value from its offset into an array of bytes |
| * |
| * @param data the byte array from which the value is to be read |
| * |
| * @exception ArrayIndexOutOfBoundsException if the offset is too |
| * large |
| */ |
| |
| public void readFromBytes(final byte [] data) |
| throws ArrayIndexOutOfBoundsException |
| { |
| _value = LittleEndian.getInt(data, _offset); |
| } |
| |
| /** |
| * set the value from an InputStream |
| * |
| * @param stream the InputStream from which the value is to be |
| * read |
| * |
| * @exception BufferUnderrunException if there is not enough data |
| * available from the InputStream |
| * @exception IOException if an IOException is thrown from reading |
| * the InputStream |
| */ |
| |
| public void readFromStream(final InputStream stream) |
| throws IOException |
| { |
| _value = LittleEndian.readInt(stream); |
| } |
| |
| /** |
| * write the value out to an array of bytes at the appropriate |
| * offset |
| * |
| * @param data the array of bytes to which the value is to be |
| * written |
| * |
| * @exception ArrayIndexOutOfBoundsException if the offset is too |
| * large |
| */ |
| |
| public void writeToBytes(final byte [] data) |
| throws ArrayIndexOutOfBoundsException |
| { |
| LittleEndian.putInt(data, _offset, _value); |
| } |
| |
| /** |
| * return the value as a String |
| * |
| * @return the value as a String |
| */ |
| |
| public String toString() |
| { |
| return String.valueOf(_value); |
| } |
| |
| /* ********** END implementation of FixedField ********** */ |
| } // end public class IntegerField |
| |