Estoy tratando de escribir los valores mayores de 256 utilizando DataOupPutStream.write() método. Cuando trato de leer el mismo valor de uso de DataInputStream.read() devolverá 0. Así que, he utilizado DataOutputStream.writeInt() y DataInputStream.readInt() métodos para escribir y recuperar los valores mayores de 256 y se está trabajando muy bien.

Consulte el siguiente fragmento de código me gustaría saber el comportamiento del compilador como lo hace en el in.readInt() dentro de la while declaración.

FileOutputStream fout = new FileOutputStream("T.txt");
BufferedOutputStream buffOut = new BufferedOutputStream(fout);
DataOutputStream out = new DataOutputStream(fout);

Integer output = 0;
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();

FileInputStream fin = new FileInputStream("T.txt");
DataInputStream in = new DataInputStream(fin);

while ((output = in.readInt()) > 0) {
    System.out.println(output);
}

La Salida cuando me encontré con este fragmento es :

Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)
257
2
2123
223
2132

Pero cuando me encontré en el modo de depuración obtengo el siguiente resultado :

2123
223
2132
Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)
InformationsquelleAutor rozar | 2011-05-26

1 Comentario

  1. 7

    La readInt() el método es un método como cualquier otro. Usted está consiguiendo un EOFException porque eso es lo que el Javadoc de readInt() dice va a suceder cuando llegue al final del archivo.


    Cuando ejecuto

    DataOutputStream out = new DataOutputStream(new FileOutputStream("T.txt"));
    out.writeInt(257);
    out.writeInt(2);
    out.writeInt(2123);
    out.writeInt(223);
    out.writeInt(2132);
    out.close();
    
    DataInputStream in = new DataInputStream(new FileInputStream("T.txt"));
    try {
        while (true) 
            System.out.println(in.readInt());
    } catch (EOFException ignored) {
        System.out.println("[EOF]");
    }
    in.close();

    Me sale esto en normal y el modo de depuración.

    257
    2
    2123
    223
    2132
    [EOF]
    • Gracias Pedro..EOFException está bien. Pero los resultados difieren en el modo de depuración y en el modo run.
    • Al escribir en el Sistema.y del Sistema.err (cuando la excepción se escriben) el orden de salida no es constante/siempre el mismo. Uso de depuración es suficiente para cambiar el orden de los resultados.
    • sí.. Pero en el modo de Depuración de los valores de lectura también es diferente. Supongo que si puedo quitar el mientras que la cláusula en mi fragmento de código y reemplazar con 5 Sistema.a cabo.println(en.readInt());
    • Mientras cláusula no hace ninguna diferencia. Es más probable que la depuración es correcta y que usted está haciendo algo mal.
    • Gracias por su respuesta y realmente lo aprecio. Se puede encontrar cualquier error en mi fragmento de código anterior, excepto que el EOFexception manejo.
    • He mostrado cómo me gustaría haber escrito. Su buffOut no se utiliza y su bucle while es la espera de algo que nunca ocurre, por lo que he simplificado su ejemplo. Usted debe trampa de su EOFException como lo he hecho yo. Si el archivo era más grande que yo usaría BufferedInputStream y BufferedOutputStream.
    • Gracias Pedro…. Se lo agradezco…

Dejar respuesta

Please enter your comment!
Please enter your name here