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
}
}
}