tango.io.stream.Data

License:
BSD style:

Version:
Initial release: Oct 2007

author:
Kris

These classes represent a simple means of reading and writing discrete data types as binary values, with an option to invert the endian order of numeric values.

Arrays are treated as untyped byte streams, with an optional length-prefix, and should otherwise be explicitly managed at the application level. We'll add additional support for arrays and aggregates in future.

class DataInput: tango.io.device.Conduit.InputFilter;
A simple way to read binary data from an arbitrary InputStream, such as a file:
auto input = new DataInput (new File ("path"));
auto x = input.int32;
auto y = input.float64;
auto l = input.read (buffer);           // read raw data directly
auto s = cast(char[]) input.array;      // read length, allocate space
input.close;


alias get = array;
alias getBool = boolean;
alias getByte = int8;
alias getShort = int16;
alias getInt = int32;
alias getLong = int64;
alias getFloat = float32;
alias getDouble = float64;
Old name aliases.

Native


Network


Big


Little


this(InputStream stream);
Propagate ctor to superclass.

final DataInput allocate(Allocate allocate);
Set the array allocator.

final DataInput endian(int e);
Set current endian translation.

final size_t array(void[] dst);
Read an array back into a user-provided workspace. The space must be sufficiently large enough to house all of the array, and the actual number of bytes is returned.

Note that the size of the array is written as an integer prefixing the array content itself. Use read(void[]) to eschew this prefix.

final void[] array();
Read an array back from the source, with the assumption it has been written using DataOutput.put() or otherwise prefixed with an integer representing the total number of bytes within the array content. That's *bytes*, not elements.

An array of the appropriate size is allocated either via the provided delegate, or from the heap, populated and returned to the caller. Casting the return value to an appropriate type will adjust the number of elements as

required:
auto text = cast(char[]) input.get;


final bool boolean();


final byte int8();


final short int16();


final int int32();


final long int64();


final float float32();


final double float64();


final size_t read(void[] data);


class DataOutput: tango.io.device.Conduit.OutputFilter;
A simple way to write binary data to an arbitrary OutputStream, such as a file:
auto output = new DataOutput (new File ("path", File.WriteCreate));
output.int32   (1024);
output.float64 (3.14159);
output.array   ("string with length prefix");
output.write   ("raw array, no prefix");
output.close;


Examples:
auto buf = new Array(32);

auto output = new DataOutput (buf);
output.array ("blah blah".dup);
output.int32 (1024);

auto input = new DataInput (buf);
assert (input.array(new char[9]) is 9);
assert (input.int32() is 1024);


alias put = array;
alias putBool = boolean;
alias putByte = int8;
alias putShort = int16;
alias putInt = int32;
alias putLong = int64;
alias putFloat = float32;
alias putFloat = float64;
Old name aliases.

Native


Network


Big


Little


this(OutputStream stream);
Propagate ctor to superclass.

final DataOutput endian(int e);
Set current endian translation.

final ulong array(const(void)[] src);
Write an array to the target stream. Note that the size of the array is written as an integer prefixing the array content itself. Use write(void[]) to eschew this prefix.

final void boolean(bool x);


final void int8(byte x);


final void int16(short x);


final void int32(int x);


final void int64(long x);


final void float32(float x);


final void float64(double x);


final size_t write(const(void)[] data);



Page generated by Ddoc. Copyright (c) 2007 Kris Bell. All rights reserved