/**
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 */
package org.logical_paradox.common.lang;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

import org.logical_paradox.common.io.ByteStream;

/**
 * バイト列化可能なIntegerラッパー
 * バイト列化した場合，IntegerはBIG_ENDIANで格納される
 * 
 * @author satoshi akabane@logical-paradox.org
 * @version 1.0
 */
public class IntegerByteStream implements ByteStream {
	private final Integer value;
	private final byte[] bstream;

	/**
	 * コンストラクタ
	 * @param l 値オブジェクト
	 */	
	public IntegerByteStream(Integer l) {
		value = l;
		bstream = objectToByteStream(l.intValue());
	}
	/**
	 * コンストラクタ
	 * @param l 値
	 */
	public IntegerByteStream(int l) {
		this(new Integer(l));
	}
	/**
	 * Integer型のオブジェクトを返す
	 * @return 値オブジェクト
	 */
	public Integer getIntegerObject() {
		return value;
	}
	/**
	 * int値を返す
	 * @return 値
	 */
	public long intValue() {
		return value.intValue();
	}
	/**
	 * このオブジェクトをバイト列に変換して返す
	 * バイト列への変換は，コンストラクタ呼び出し時に行われているので，
	 * ここでは単にそれを返すだけ
	 * @return バイト列
	 */
	public byte[] byteStream() {
		return bstream;
	}
	/**
	 * 値オブジェクトからバイト列へ変換して返す
	 * @param l 値
	 * @return バイト列
	 */
	protected byte[] objectToByteStream(int l) {
		ByteBuffer buffer = ByteBuffer.allocate(8).order(ByteOrder.BIG_ENDIAN);
		buffer.rewind();
		buffer.putInt(l);
		
		return buffer.array();
	}
}

// end of IntegerByteStream.java
