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:
con éste:DataInputStream d = new DataInputStream(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.BufferedReader d = new BufferedReader(new InputStreamReader(in));
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.