blob: e6e7f3c364d016fbceaafe96fb8ba349722a5dda [file] [log] [blame]
/*
* 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.
*/
#ifndef _DECAF_IO_DATAOUTPUTSTREAM_H_
#define _DECAF_IO_DATAOUTPUTSTREAM_H_
#include <decaf/io/FilterOutputStream.h>
namespace decaf{
namespace io{
/**
* A data output stream lets an application write primitive Java data
* types to an output stream in a portable way. An application can then
* use a data input stream to read the data back in.
*/
class DECAF_API DataOutputStream : public FilterOutputStream
{
protected:
// The number of bytes written to the data output stream so far.
std::size_t written;
public:
/**
* Creates a new data output stream to write data to the specified
* underlying output stream.
* @param outputStream a stream to wrap with this one.
* @param own true if this objects owns the stream that it wraps.
*/
DataOutputStream( OutputStream* outputStream, bool own = false );
virtual ~DataOutputStream();
/**
* Returns the current value of the counter written, the number of
* bytes written to this data output stream so far. If the counter
* overflows, it will be wrapped to Integer.MAX_VALUE.
* @return the value of the written field.
*/
virtual std::size_t size() const {
return written;
}
/**
* Writes a single byte to the output stream. If no exception is
* thrown, the counter written is incremented by 1.
* @param c the byte.
* @throws IOException thrown if an error occurs.
*/
virtual void write( unsigned char c ) throw ( IOException );
/**
* Writes an array of bytes to the output stream. the counter
* written is incremented by len.
* @param buffer The array of bytes to write.
* @param len The number of bytes from the buffer to be written.
* @throws IOException thrown if an error occurs.
*/
virtual void write( const unsigned char* buffer, std::size_t len )
throw ( IOException );
/**
* Writes an array of bytes to the output stream. the counter
* written is incremented by len.
* @param buffer The array of bytes to write.
* @param len The number of bytes from the buffer to be written.
* @throws IOException thrown if an error occurs.
*/
virtual void write( const unsigned char* buffer,
std::size_t offset,
std::size_t len ) throw ( IOException );
/**
* Writes an array of bytes to the output stream.
* @param buffer The bytes to write.
* @throws IOException thrown if an error occurs.
*/
virtual void write( const std::vector<unsigned char>& buffer )
throw ( IOException );
/**
* 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 value the boolean to write.
* @throws IOException
*
*/
virtual void writeBoolean( bool value ) throw ( IOException );
/**
* 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 value the unsigned char value to write.
* @throws IOException
*/
virtual void writeByte( unsigned char value ) throw ( IOException );
/**
* Writes a short to the underlying output stream as two bytes, high
* byte first. If no exception is thrown, the counter written is
* incremented by 2.
* @param value the value to write.
* @throws IOException
*/
virtual void writeShort( short value ) throw ( IOException );
/**
* Writes a unsigned short to the bytes message stream as a 2 byte value
* @param value - unsigned short to write to the stream
* @throws IOException
*/
virtual void writeUnsignedShort( unsigned short value ) throw ( IOException );
/**
* Writes out a char to the underlying output stream as a one byte
* value If no exception is thrown, the counter written is
* incremented by 1.
* @param value the value to write.
* @throws IOException
*/
virtual void writeChar( char value ) throw ( IOException );
/**
* Writes an int to the underlying output stream as four bytes, high
* byte first. If no exception is thrown, the counter written is
* incremented by 4.
* @param value the value to write.
* @throws IOException
*/
virtual void writeInt( int value ) throw ( IOException );
/**
* Writes an 64 bit long to the underlying output stream as eight
* bytes, high byte first. If no exception is thrown, the counter
* written is incremented by 8.
* @param value the value to write.
* @throws IOException
*/
virtual void writeLong( long long value ) throw ( IOException );
/**
* 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, high byte first.
* If no exception is thrown, the counter written is incremented
* by 4.
* @param value the value to write.
* @throws IOException
*/
virtual void writeFloat( float value ) throw ( IOException );
/**
* 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, high byte first.
* If no exception is thrown, the counter written is incremented
* by 8.
* @param value the value to write.
* @throws IOException
*/
virtual void writeDouble( double value ) throw ( IOException );
/**
* Writes out the string to the underlying output stream as a
* sequence of bytes. Each character in the string is written out,
* in sequence, by discarding its high eight bits. If no exception
* is thrown, the counter written is incremented by the length of
* value. The value written does not include a trailing null as that
* is not part of the sequence of bytes, if the null is needed, then use
* the writeChars method.
* @param value the value to write.
* @throws IOException
*/
virtual void writeBytes( const std::string& value ) throw ( IOException );
/**
* Writes a string to the underlying output stream as a sequence of
* characters. Each character is written to the data output stream
* as if by the writeChar method. If no exception is thrown, the
* counter written is incremented by the length of value. The trailing
* NULL charactor is written by this method.
* @param value the value to write.
* @throws IOException
*/
virtual void writeChars( const std::string& value ) throw ( IOException );
/**
* Writes out the string to the underlying output stream as a
* unsigned short indicating its length followed by the rest of
* the string.
* @param value the value to write.
* @throws IOException
*/
virtual void writeUTF( const std::string& value ) throw ( IOException );
};
}}
#endif /*_DECAF_IO_DATAOUTPUTSTREAM_H_*/