DataInputStream与DataOutputStream提供了与平台无关的数据操作,通常会先通过DataOutputStream按照一定的格式输出,再通过DataInputStream按照一定格式读入。由于可以得到java的各种基本类型甚至字符串,这样对得到的数据便可以方便地进行处理,这在通过协议传输的信息的网络上是非常适用的。
如下面范例:
用户的定单用如下格式储存为order.txt文件:
价格数量 描述
18.99 10 T恤杉
9.22 10 杯子
实现机制如下:
(1)、写入端构造一个DataOutputStream,并按照一定格式写入数据:
// 将数据写入某一种载体
DataOutputStream out = new DataOutputStream(new FileOutputStream("order.txt"));
// 价格
double[] prices = { 18.99, 9.22, 14.22, 5.22, 4.21 };
// 数目
int[] units = { 10, 10, 20, 39, 40 };
// 产品名称
String[] descs = { "T恤杉", "杯子", "洋娃娃", "大头针", "钥匙链" };
// 向数据过滤流写入主要类型
for (int i = 0; i < prices.length; i++)
{
// 写入价格,使用tab隔开数据
out.writeDouble(prices[i]);
out.writeChar('\t');
// 写入数目
out.writeInt(units[i]);
out.writeChar('\t');
// 写入产品名称,行尾加入换行符
out.writeChars(descs[i]);
out.writeChar('\n');
}
out.close();
(2)、计价程序读入并在标准输出中输出:
// 将数据读出
DataInputStream in = new DataInputStream(new FileInputStream("order.txt"));
double price;
int unit;
StringBuffer desc;
double total = 0.0;
try
{
// 当文本被全部读出以后会抛出EOFException例外,中断循环
while (true)
{
// 读出价格
price = in.readDouble();
// 跳过tab
in.readChar();
// 读出数目
unit = in.readInt();
// 跳过tab
in.readChar();
char chr;
// 读出产品名称
desc = new StringBuffer();
while ((chr = in.readChar()) != '\n')
{
desc.append(chr);
}
System.out.println("定单信息: " + "产品名称:"+desc+",\t数量:"+unit+",\t价格:"+price);
total = total + unit * price;
}
}
catch (EOFException e)
{
System.out.println("\n总共需要:" + total+"元");
}
in.close();
|