All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.anaptecs.jeaf.workload.proxy.ByteBufferOutputStream Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2004 - 2021 anaptecs GmbH, Burgstr. 96, 72764 Reutlingen, Germany
 *
 * All rights reserved.
 */

package com.anaptecs.jeaf.workload.proxy;

import java.io.OutputStream;
import java.nio.ByteBuffer;

import com.anaptecs.jeaf.xfun.api.checks.Check;

/**
 * Class implements an {@link OutputStream} using {@link ByteBuffer}. This class is part of a set of classes that try to
 * implement a low garbage approach when working with streams. This class requires that the amount of data that should
 * be written is known before we start writing to the stream.
 * 
 * @author JEAF Development Team
 */
public class ByteBufferOutputStream extends OutputStream {
  /**
   * The buffer where data is stored.
   */
  protected ByteBuffer byteBuffer;

  /**
   * Initialize object using the byte buffer that was passed as parameter. This method is intended to be used in cases
   * where byte buffers are pooled in order to avoid garbage.
   * 
   * @param pByteBuffer Byte buffer that should be used to store data that is send to to stream. The parameter must not
   * be null.
   */
  public ByteBufferOutputStream( ByteBuffer pByteBuffer ) {
    // Check parameter
    Check.checkInvalidParameterNull(pByteBuffer, "pByteBuffer");

    byteBuffer = pByteBuffer;
  }

  /**
   * Method writes the passed int as byte to the stream. According to specification from {@link OutputStream#write(int)}
   * the upper 24 bit of the int are ignored ( means we will downcast int to byte).
   *
   * @param pByte int that will be written as byte to the stream.
   */
  @Override
  public void write( int pByte ) {
    // According to specification we have to ignore the upper 24 bits of the int. So we just downcast it to an int.
    byteBuffer.put((byte) pByte);
  }

  /**
   * Method writes the passed amount of bytes from the passed array to the stream starting an the given position.
   * 
   * @param pBytes Source array. The parameter must not be null.
   * @param pOffset Offset from the source array where we should start with copying the data.
   * @param pLength Amount of bytes that should be written.
   */
  @Override
  public void write( byte[] pBytes, int pOffset, int pLength ) {
    byteBuffer.put(pBytes, pOffset, pLength);
  }

  /**
   * Method returns the {@link ByteBuffer} that was used to store the data that was written to the stream.
   * 
   * @return {@link ByteBuffer} Reference to byte buffer that was used to write the data that was send to this stream.
   * This is the same object as the one that was passed when the stream was created. The method never returns null.
   */
  public ByteBuffer getByteBuffer( ) {
    return byteBuffer;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy