public abstract class DataOutput
extends java.lang.Object
DataOutput may only be used from one thread, because it is not
thread safe (it keeps internal state like file position).
| Modifier and Type | Field and Description |
|---|---|
private static int |
COPY_BUFFER_SIZE |
private byte[] |
copyBuffer |
| Constructor and Description |
|---|
DataOutput() |
| Modifier and Type | Method and Description |
|---|---|
void |
copyBytes(DataInput input,
long numBytes)
Copy numBytes bytes from input to ourself.
|
abstract void |
writeByte(byte b)
Writes a single byte.
|
void |
writeBytes(byte[] b,
int length)
Writes an array of bytes.
|
abstract void |
writeBytes(byte[] b,
int offset,
int length)
Writes an array of bytes.
|
void |
writeInt(int i)
Writes an int as four bytes.
|
void |
writeLong(long i)
Writes a long as eight bytes.
|
void |
writeMapOfStrings(java.util.Map<java.lang.String,java.lang.String> map)
Writes a String map.
|
void |
writeSetOfStrings(java.util.Set<java.lang.String> set)
Writes a String set.
|
void |
writeShort(short i)
Writes a short as two bytes.
|
private void |
writeSignedVLong(long i) |
void |
writeString(java.lang.String s)
Writes a string.
|
void |
writeVInt(int i)
Writes an int in a variable-length format.
|
void |
writeVLong(long i)
Writes an long in a variable-length format.
|
void |
writeZInt(int i)
Write a
zig-zag-encoded
variable-length integer. |
void |
writeZLong(long i)
Write a
zig-zag-encoded
variable-length long. |
private static int COPY_BUFFER_SIZE
private byte[] copyBuffer
public abstract void writeByte(byte b)
throws java.io.IOException
The most primitive data type is an eight-bit byte. Files are accessed as sequences of bytes. All other data types are defined as sequences of bytes, so file formats are byte-order independent.
java.io.IOExceptionDataInput.readByte()public void writeBytes(byte[] b,
int length)
throws java.io.IOException
b - the bytes to writelength - the number of bytes to writejava.io.IOExceptionDataInput.readBytes(byte[],int,int)public abstract void writeBytes(byte[] b,
int offset,
int length)
throws java.io.IOException
b - the bytes to writeoffset - the offset in the byte arraylength - the number of bytes to writejava.io.IOExceptionDataInput.readBytes(byte[],int,int)public void writeInt(int i)
throws java.io.IOException
32-bit unsigned integer written as four bytes, high-order bytes first.
java.io.IOExceptionDataInput.readInt()public void writeShort(short i)
throws java.io.IOException
java.io.IOExceptionDataInput.readShort()public final void writeVInt(int i)
throws java.io.IOException
VByte is a variable-length format for positive integers is defined where the high-order bit of each byte indicates whether more bytes remain to be read. The low-order seven bits are appended as increasingly more significant bits in the resulting integer value. Thus values from zero to 127 may be stored in a single byte, values from 128 to 16,383 may be stored in two bytes, and so on.
VByte Encoding Example
| Value | Byte 1 | Byte 2 | Byte 3 |
|---|---|---|---|
| 0 | 00000000 |
||
| 1 | 00000001 |
||
| 2 | 00000010 |
||
| ... | |||
| 127 | 01111111 |
||
| 128 | 10000000 |
00000001 |
|
| 129 | 10000001 |
00000001 |
|
| 130 | 10000010 |
00000001 |
|
| ... | |||
| 16,383 | 11111111 |
01111111 |
|
| 16,384 | 10000000 |
10000000 |
00000001 |
| 16,385 | 10000001 |
10000000 |
00000001 |
| ... |
This provides compression while still being efficient to decode.
i - Smaller values take fewer bytes. Negative numbers are
supported, but should be avoided.java.io.IOException - If there is an I/O error writing to the underlying medium.DataInput.readVInt()public final void writeZInt(int i)
throws java.io.IOException
zig-zag-encoded
variable-length integer. This is typically useful
to write small signed ints and is equivalent to calling
writeVInt(BitUtil.zigZagEncode(i)).java.io.IOExceptionDataInput.readZInt()public void writeLong(long i)
throws java.io.IOException
64-bit unsigned integer written as eight bytes, high-order bytes first.
java.io.IOExceptionDataInput.readLong()public final void writeVLong(long i)
throws java.io.IOException
The format is described further in writeVInt(int).
java.io.IOExceptionDataInput.readVLong()private void writeSignedVLong(long i)
throws java.io.IOException
java.io.IOExceptionpublic final void writeZLong(long i)
throws java.io.IOException
zig-zag-encoded
variable-length long. Writes between one and ten
bytes. This is typically useful to write small signed ints.java.io.IOExceptionDataInput.readZLong()public void writeString(java.lang.String s)
throws java.io.IOException
Writes strings as UTF-8 encoded bytes. First the length, in bytes, is
written as a VInt, followed by the bytes.
java.io.IOExceptionDataInput.readString()public void copyBytes(DataInput input, long numBytes) throws java.io.IOException
java.io.IOExceptionpublic void writeMapOfStrings(java.util.Map<java.lang.String,java.lang.String> map)
throws java.io.IOException
First the size is written as an vInt,
followed by each key-value pair written as two consecutive
Strings.
map - Input map.java.lang.NullPointerException - if map is null.java.io.IOExceptionpublic void writeSetOfStrings(java.util.Set<java.lang.String> set)
throws java.io.IOException
First the size is written as an vInt,
followed by each value written as a
String.
set - Input set.java.lang.NullPointerException - if set is null.java.io.IOException