(1)过滤流:将一个过滤流连接到另一个流上,则在从原始的流读写数据的同时,利用过滤流可以对这些数据进行加工处理。
(2)DataInputStream 和DataOutputStream类:它们分别为FilterInputStream和FilterOutputStream类的子类。同时DataInputStream 和DataOutputStream类由于分别实现了DataInput和DataOutput接口中定义的独立于具体机器的带格式的读写操作,从而可以实现对Java中的不同类型的基本类型数据的读写。
(3)编程方法:为了使用过滤流,用户需要在创建过滤流的同时将过滤流连接到另一个输入(输出)流上。如可以将DataInputStream连接到标准的输入流上,然后用户就可以方便地使用DataInputStream类的readXXX()方法类实现从标准输入中读取数据。
DataTest.java
import java.io.*;
public class DataTest {
public static void main(String[] args) throws IOException {
// 将数据写入某一种载体
DataOutputStream out = 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++) {
// 写入价格
// 注意为了明了起见,使用tab隔开数据
out.writeDouble(prices[i]);
out.writeChar('\t');
// 写入数目
out.writeInt(units[i]);
out.writeChar('\t');
// 写入描述
// 行尾加入换行符
out.writeChars(descs[i]);
out.writeChar('\n');
}
out.close();
// 将数据读出
DataInputStream in = new DataInputStream(new FileInputStream("invoice1.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("You've ordered " + unit + " units of "
+ desc + " at $" + price);
total = total + unit * price;
}
} catch (EOFException e) {
System.out.println("For a TOTAL of: $" + total);
}
in.close();
}
}
DataReader.java
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class DataReader {
public static void main(String args[]) {
int X;
float Y;
try {
FileInputStream fis = new FileInputStream("c://UserInput.txt");
DataInputStream dis = new DataInputStream(fis);
X = dis.readInt();
Y = dis.readFloat();
dis.close();
System.out.println("X=" + X);
System.out.println("Y=" + Y);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
DataWriter.java
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataWriter {
public static void main(String args[]) {
int X = 100;
float Y = 3.14f;
try {
FileOutputStream fos = new FileOutputStream("c://UserInput.txt");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeInt(X);
dos.writeFloat(Y); // 读取数据顺序按照写入顺序依次读取(区分类型)
dos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上就是带格式的过滤流读写操作。