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 parquet.bytes;
import java.io.IOException;
import java.io.OutputStream;
/**
* Based on DataOutputStream but in little endian and without the String/char methods
*
* @author Julien Le Dem
*
*/
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));
}
}