Java的处理流是包装在流上面的流,对被包装的流进行增强扩展,就相当于在原来的管道上封装一个更为强大的管道。如下图所示:
根据节点流需要包装的流的不同,及处理的数据单位不同,分为以下几类:
在如下示例中,先new出节点流fis,即新建一条管道与数据源相连:
FileInputStream fis = new FileInputStream("d:\\HelloWorld.java");
然后在该节点流外包装一层处理流bis,即在原先的管道外面包装一条管道,增加了缓冲的功能,就对原功能进行了扩展:
BufferedInputStream bis = new BufferedInputStream(fis);
public class TestBufferStream1 {//处理流
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("d:\\HelloWorld.java");//节点流。new出一条管道连着数据源
BufferedInputStream bis = new BufferedInputStream(fis);//处理流,在节点流外再套一层管道。包装fis流,提供缓冲的功能
int c = 0;
System.out.println(bis.read());//读出一个字节
System.out.println(bis.read());//读出一个字节
bis.mark(100);//标记第100个字节
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){//从第100个开始读
System.out.print((char)c+" ");
}
System.out.println();
bis.reset();//重新回到标记的点上(第100个字节处)
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
System.out.print((char)c+" ");
}
bis.close();
} catch (IOException e) {e.printStackTrace();}
}
}
public class TestBufferStream2 {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\dat2.txt"));//包装节点流
BufferedReader br = new BufferedReader(new FileReader("d:\\dat2.txt"));
String s = null;
for(int i=1;i<=100;i++){
s = String.valueOf(Math.random());//将随机数转化为字符串
bw.write(s);//写一个字符串
bw.newLine();//换行
}
bw.flush();//刷新缓冲区,全部写入文件
while((s=br.readLine())!=null){//读一行
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) { e.printStackTrace();}
}
}