четверг, 4 ноября 2010 г.

Java I/O DataStreams

Это потоки для работы с простыми типами, вот примеры их использования:


static final String dataFile = "invoicedata";

static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
static final int[] units = { 12, 8, 13, 29, 50 };
static final String[] descs = { "Java T-shirt",
        "Java Mug",
        "Duke Juggling Dolls",
        "Java Pin",
        "Java Key Chain" };
out = new DataOutputStream(new
            BufferedOutputStream(new FileOutputStream(dataFile)));
for (int i = 0; i < prices.length; i ++) {
    out.writeDouble(prices[i]);
    out.writeInt(units[i]);
    out.writeUTF(descs[i]);
}
//дата стрим кстати сам закрывает свой обвернутый поток
in = new DataInputStream(new
            BufferedInputStream(new FileInputStream(dataFile)));

double price;
int unit;
String desc;
double total = 0.0;
try {
    while (true) {
        price = in.readDouble();
        unit = in.readInt();
        desc = in.readUTF();
        System.out.format("You ordered %d units of %s at $%.2f%n",
                unit, desc, price);
        total += unit * price;
    }
} catch (EOFException e) {
}
Когда работаешь с деньгами нельзя использовать числа с плавающими точками, у них проблемы точностью, когда переганяешь в байтовый поток.
Для денег используется java.math.BigDecimal, но это не простой тип, это обьект, поэтому с ДатаСтримами он работать не может. Он работает с ObjectStreams.

Комментариев нет:

Отправить комментарий