Java : DataInput con ejemplos

DataInput (Java SE 21 & JDK 21) en Java con ejemplos.
Encontrará ejemplos de código en la mayoría de los métodos de DataInput.

Nota :


Summary

La interfaz DataInput permite leer bytes de un flujo binario y reconstruir a partir de ellos datos en cualquiera de los tipos primitivos de Java. También existe una función para reconstruir una cadena a partir de datos en formato UTF-8 modificado. (Traducción automática)

Class diagram

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeByte(0xff);
    os.writeInt(0x12345678);
    os.writeUTF("abcd");
}

final var bytes = out.toByteArray();

// [ff, 12, 34, 56, 78, 00, 04, 61, 62, 63, 64]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    final var b = target.readByte();
    System.out.printf("%x%n", b); // ff

    final var i = target.readInt();
    System.out.printf("%x%n", i); // 12345678

    final var utf = target.readUTF();
    System.out.println(utf); // abcd
}

Methods

boolean readBoolean ()

Lee un byte de entrada y devuelve verdadero si ese byte no es cero, falso si ese byte es cero. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeBoolean(true);
    os.writeBoolean(false);
}

final var bytes = out.toByteArray();

// [01, 00]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readBoolean()); // true
    System.out.println(target.readBoolean()); // false
}

byte readByte ()

Lee y devuelve un byte de entrada. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeByte(0x10);
    os.writeByte(0x20);
    os.writeByte(0xff);
}

final var bytes = out.toByteArray();

// [10, 20, ff]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.printf("%x%n", target.readByte()); // 10
    System.out.printf("%x%n", target.readByte()); // 20
    System.out.printf("%x%n", target.readByte()); // ff
}

char readChar ()

Lee dos bytes de entrada y devuelve un valor de carácter. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeChar('a');
    os.writeChar('b');
    os.writeChar('○');
    os.writeChar('△');
}

final var bytes = out.toByteArray();

// [00, 61, 00, 62, 25, cb, 25, b3]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readChar()); // a
    System.out.println(target.readChar()); // b
    System.out.println(target.readChar()); // ○
    System.out.println(target.readChar()); // △
}

double readDouble ()

Lee ocho bytes de entrada y devuelve un valor doble. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeDouble(1.23);
    os.writeDouble(-4.56);
}

final var bytes = out.toByteArray();

// [3f, f3, ae, 14, 7a, e1, 47, ae, c0, 12, 3d, 70, a3, d7, 0a, 3d]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readDouble()); // 1.23
    System.out.println(target.readDouble()); // -4.56
}

float readFloat ()

Lee cuatro bytes de entrada y devuelve un valor flotante. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeFloat(1.23f);
    os.writeFloat(-4.56f);
}

final var bytes = out.toByteArray();

// [3f, 9d, 70, a4, c0, 91, eb, 85]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readFloat()); // 1.23
    System.out.println(target.readFloat()); // -4.56
}

void readFully (byte[] b)

Lee algunos bytes de un flujo de entrada y los almacena en la matriz de búfer b. (Traducción automática)

final byte[] buf = {10, 20, 30, 40, 50, 60, 70};

try (final var is = new DataInputStream(new ByteArrayInputStream(buf))) {
    final DataInput target = is;

    final var b1 = new byte[3];

    target.readFully(b1);
    System.out.println(Arrays.toString(b1)); // [10, 20, 30]

    final var b2 = new byte[3];

    target.readFully(b2);
    System.out.println(Arrays.toString(b2)); // [40, 50, 60]

    try {
        final var b3 = new byte[3];
        target.readFully(b3);
    } catch (EOFException e) {
        System.out.println("EOFException!");
    }

    // Result
    // ↓
    //EOFException!
}

void readFully (byte[] b, int off, int len)

Lee len bytes de un flujo de entrada. (Traducción automática)

Please see also : readFully(byte[] b)

final byte[] buf = {10, 20, 30, 40, 50, 60};

try (final var is = new DataInputStream(new ByteArrayInputStream(buf))) {
    final DataInput target = is;

    final var b1 = new byte[3];

    target.readFully(b1, 0, 1);
    System.out.println(Arrays.toString(b1)); // [10, 0, 0]

    final var b2 = new byte[3];

    target.readFully(b2, 0, 2);
    System.out.println(Arrays.toString(b2)); // [20, 30, 0]

    final var b3 = new byte[3];

    target.readFully(b3, 0, 3);
    System.out.println(Arrays.toString(b3)); // [40, 50, 60]
}

try (final var is = new DataInputStream(new ByteArrayInputStream(buf))) {
    final DataInput target = is;

    final var b1 = new byte[4];

    target.readFully(b1, 0, 2);
    System.out.println(Arrays.toString(b1)); // [10, 20, 0, 0]

    final var b2 = new byte[4];

    target.readFully(b2, 1, 2);
    System.out.println(Arrays.toString(b2)); // [0, 30, 40, 0]

    final var b3 = new byte[4];

    target.readFully(b3, 2, 2);
    System.out.println(Arrays.toString(b3)); // [0, 0, 50, 60]
}

int readInt ()

Lee cuatro bytes de entrada y devuelve un valor int. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeInt(0x12345678);
    os.writeInt(0xff);
}

final var bytes = out.toByteArray();

// [12, 34, 56, 78, 00, 00, 00, ff]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.printf("%x%n", target.readInt()); // 12345678
    System.out.printf("%x%n", target.readInt()); // ff
}

String readLine ()

Lee la siguiente línea de texto del flujo de entrada. (Traducción automática)

This method is deprecated in DataInputStream. Please see DataInputStream (Java SE 21 & JDK 21) for the details and alternatives.

long readLong ()

Lee ocho bytes de entrada y devuelve un valor largo. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeLong(0x1234567890abcdefL);
    os.writeLong(0xff);
}

final var bytes = out.toByteArray();

// [12, 34, 56, 78, 90, ab, cd, ef, 00, 00, 00, 00, 00, 00, 00, ff]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.printf("%x%n", target.readLong()); // 1234567890abcdef
    System.out.printf("%x%n", target.readLong()); // ff
}

short readShort ()

Lee dos bytes de entrada y devuelve un valor corto. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeShort(0x1234);
    os.writeShort(0xff);
}

final var bytes = out.toByteArray();

// [12, 34, 00, ff]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.printf("%x%n", target.readShort()); // 1234
    System.out.printf("%x%n", target.readShort()); // ff
}

int readUnsignedByte ()

Lee un byte de entrada, lo extiende a cero al tipo int y devuelve el resultado, que por lo tanto está en el rango de 0 a 255. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeByte(10);
    os.writeByte(20);
    os.writeByte(-1);
}

final var bytes = out.toByteArray();

// [0a, 14, ff]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readByte()); // 10
    System.out.println(target.readByte()); // 20
    System.out.println(target.readByte()); // -1
}

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readUnsignedByte()); // 10
    System.out.println(target.readUnsignedByte()); // 20
    System.out.println(target.readUnsignedByte()); // 255
}

int readUnsignedShort ()

Lee dos bytes de entrada y devuelve un valor int en el rango de 0 a 65535. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeShort(10);
    os.writeShort(20);
    os.writeShort(-1);
}

final var bytes = out.toByteArray();

// [00, 0a, 00, 14, ff, ff]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readShort()); // 10
    System.out.println(target.readShort()); // 20
    System.out.println(target.readShort()); // -1
}

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readUnsignedShort()); // 10
    System.out.println(target.readUnsignedShort()); // 20
    System.out.println(target.readUnsignedShort()); // 65535
}

String readUTF ()

Lee una cadena que ha sido codificada utilizando un formato UTF-8 modificado. (Traducción automática)

final var out = new ByteArrayOutputStream();
try (final var os = new DataOutputStream(out)) {
    os.writeUTF("abc");
    os.writeUTF("○△×");
}

final var bytes = out.toByteArray();

// [00, 03, 61, 62, 63, 00, 08, e2, 97, 8b, e2, 96, b3, c3, 97]
System.out.println("[" + HexFormat.ofDelimiter(", ").formatHex(bytes) + "]");

try (final var is = new DataInputStream(new ByteArrayInputStream(bytes))) {
    final DataInput target = is;

    System.out.println(target.readUTF()); // abc
    System.out.println(target.readUTF()); // ○△×
}

int skipBytes (int n)

Intenta omitir n bytes de datos del flujo de entrada, descartando los bytes omitidos. (Traducción automática)

final byte[] buf = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};

try (final var is = new DataInputStream(new ByteArrayInputStream(buf))) {
    final DataInput target = is;

    System.out.println(target.readByte()); // 10

    System.out.println(target.skipBytes(1)); // 1
    System.out.println(target.readByte()); // 30

    System.out.println(target.skipBytes(2)); // 2
    System.out.println(target.readByte()); // 60

    System.out.println(target.skipBytes(3)); // 3
    System.out.println(target.readByte()); // 100

    System.out.println(target.skipBytes(1)); // 0
}

Related posts

To top of page