Cambios en el JDK 1.1:
El ejemplo DataIOTest

El ejemplo DataIOTest utiliza el método DataInputStream.readLine que ha caducado en el JDK 1.1. El método DataInputStream.readLine no convertía apropiadamente los bytes en caracteres. En el JDK 1.1 el método preferido para leer líneas es BufferedReader.readLine.

Los programas que utilicen solo el método readLine de DataInputStream simplemente pueden utilziar un BufferedReader en su lugar. Para hacer esto, reemplaza el este código:

DataInputStream d = new DataInputStream(in);
con éste:
BufferedReader d = new BufferedReader(new InputStreamReader(in));
Sin embargo, otros programas, como el ejemplo DataIOTest que utilizan otros métodos readXXX de DataInputStream deben reescribirse porque BufferedReader no soporta estos otros métodos. Dichos programas se deben reescribir de una forma particular.

Por ejemplo, el programa DataIOTest puede ser modificado utilizando readChar de DataInputStream de forma iterativa en ver de readLine:

import java.io.*;

class DataIOTest {
    public static void main(String[] args) {

            // writing part
        try {
            DataOutputStream dos = new DataOutputStream(new FileOutputStream("invoice1.txt"));

            double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
            int[] units = { 12, 8, 13, 29, 50 };
            String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" };
        
            for (int i = 0; i < prices.length; i ++) {
                dos.writeDouble(prices[i]);
                dos.writeChar('\t');
                dos.writeInt(units[i]);
                dos.writeChar('\t');
                dos.writeChars(descs[i]);
                dos.writeChar('\n');
            }
            dos.close();
        } catch (IOException e) {
            System.err.println("DataIOTest: " + e);
        }

            // reading part
        try {
            DataInputStream dis = new DataInputStream(new FileInputStream("invoice1.txt"));
	    PrintWriter stdout = new PrintWriter(System.out, true);

            double price;
            int unit;
            double total = 0.0;
	    char chr;

            try {
                while (true) {
                    price = dis.readDouble();
                    dis.readChar();       // throws out the tab
                    unit = dis.readInt();
		    StringBuffer desc = new StringBuffer(20);
		    while ((chr = dis.readChar()) != '\n')
			    desc.append(chr);
                    stdout.println("You've ordered " + unit + " units of " + desc + " at $" + price);
                    total = total + unit * price;
                }
            } catch (EOFException e) {
            }
            stdout.println("For a TOTAL of: $" + total);
            dis.close();
        } catch (FileNotFoundException e) {
            System.err.println("DataIOTest: " + e);
        } catch (IOException e) {
            System.err.println("DataIOTest: " + e);
        }
    }
}
Observa que DataIOTest también ha sido actualizado para utilizar un PrintWriter para producir su salida en ver de utilizar System.out.


Ozito