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

org.apache.parquet.bytes.LittleEndianDataOutputStream Maven / Gradle / Ivy

/* 
 * 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.parquet.bytes;

import java.io.IOException;
import java.io.OutputStream;

/**
 * Based on DataOutputStream but in little endian and without the String/char methods
 */
public class LittleEndianDataOutputStream extends OutputStream {

  private final OutputStream out;

  /**
   * Creates a new data output stream to write data to the specified
   * underlying output stream. The counter written is
   * set to zero.
   *
   * @param   out   the underlying output stream, to be saved for later
   *                use.
   * @see     java.io.FilterOutputStream#out
   */
  public LittleEndianDataOutputStream(OutputStream out) {
    this.out = out;
  }

  /**
   * Writes the specified byte (the low eight bits of the argument
   * b) to the underlying output stream. If no exception
   * is thrown, the counter written is incremented by
   * 1.
   * 

* Implements the write method of OutputStream. * * @param b the byte to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public void write(int b) throws IOException { out.write(b); } /** * Writes len bytes from the specified byte array * starting at offset off to the underlying output stream. * If no exception is thrown, the counter written is * incremented by len. * * @param b the data. * @param off the start offset in the data. * @param len the number of bytes to write. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public void write(byte b[], int off, int len) throws IOException { out.write(b, off, len); } /** * Flushes this data output stream. This forces any buffered output * bytes to be written out to the stream. *

* The flush method of DataOutputStream * calls the flush method of its underlying output stream. * * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out * @see java.io.OutputStream#flush() */ public void flush() throws IOException { out.flush(); } /** * Writes a boolean to the underlying output stream as * a 1-byte value. The value true is written out as the * value (byte)1; the value false is * written out as the value (byte)0. If no exception is * thrown, the counter written is incremented by * 1. * * @param v a boolean value to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public final void writeBoolean(boolean v) throws IOException { out.write(v ? 1 : 0); } /** * Writes out a byte to the underlying output stream as * a 1-byte value. If no exception is thrown, the counter * written is incremented by 1. * * @param v a byte value to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public final void writeByte(int v) throws IOException { out.write(v); } /** * Writes a short to the underlying output stream as two * bytes, low byte first. If no exception is thrown, the counter * written is incremented by 2. * * @param v a short to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public final void writeShort(int v) throws IOException { out.write((v >>> 0) & 0xFF); out.write((v >>> 8) & 0xFF); } /** * Writes an int to the underlying output stream as four * bytes, low byte first. If no exception is thrown, the counter * written is incremented by 4. * * @param v an int to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public final void writeInt(int v) throws IOException { // TODO: see note in LittleEndianDataInputStream: maybe faster // to use Integer.reverseBytes() and then writeInt, or a ByteBuffer // approach out.write((v >>> 0) & 0xFF); out.write((v >>> 8) & 0xFF); out.write((v >>> 16) & 0xFF); out.write((v >>> 24) & 0xFF); } private byte writeBuffer[] = new byte[8]; /** * Writes a long to the underlying output stream as eight * bytes, low byte first. In no exception is thrown, the counter * written is incremented by 8. * * @param v a long to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public final void writeLong(long v) throws IOException { writeBuffer[7] = (byte)(v >>> 56); writeBuffer[6] = (byte)(v >>> 48); writeBuffer[5] = (byte)(v >>> 40); writeBuffer[4] = (byte)(v >>> 32); writeBuffer[3] = (byte)(v >>> 24); writeBuffer[2] = (byte)(v >>> 16); writeBuffer[1] = (byte)(v >>> 8); writeBuffer[0] = (byte)(v >>> 0); out.write(writeBuffer, 0, 8); } /** * Converts the float argument to an int using the * floatToIntBits method in class Float, * and then writes that int value to the underlying * output stream as a 4-byte quantity, low byte first. If no * exception is thrown, the counter written is * incremented by 4. * * @param v a float value to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out * @see java.lang.Float#floatToIntBits(float) */ public final void writeFloat(float v) throws IOException { writeInt(Float.floatToIntBits(v)); } /** * Converts the double argument to a long using the * doubleToLongBits method in class Double, * and then writes that long value to the underlying * output stream as an 8-byte quantity, low byte first. If no * exception is thrown, the counter written is * incremented by 8. * * @param v a double value to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out * @see java.lang.Double#doubleToLongBits(double) */ public final void writeDouble(double v) throws IOException { writeLong(Double.doubleToLongBits(v)); } public void close() { try { out.close(); } catch (IOException e) { // swallow exception } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy