是处理流的一种,它是要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,避免频繁读写硬盘, 提高了读写的效率。同时增加了一些新的方法。
BufferedReader(Reader in) BufferedReader(Reader in,int sz) //sz 为自定义缓冲区的大小 BufferedWriter(Writer out) BufferedWriter(Writer out,int sz) BufferedInputStream(InputStream in) BufferedInputStream(InputStream in,int size) BufferedOutputStream(InputStream in) BufferedOutputStream(InputStream in,int size)BufferedInputStream
package com.kuang.chapter; import java.io.*; public class TestBufferStream { public static void main(String args[]) { FileInputStream fis = null; File f = new File("a.txt"); try { fis = new FileInputStream( f); // 在FileInputStream节点流的外面套接一层处理流BufferedInputStream BufferedInputStream bis = new BufferedInputStream(fis); int c = 0; System.out.println((char) bis.read()); System.out.println((char) bis.read()); bis.mark(100);// 在第100个字符处做一个标记 for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) { System.out.print((char) c); } System.out.println(); bis.reset();// 重新回到原来标记的地方 for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) { System.out.print((char) c); } bis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e1) { e1.printStackTrace(); } } }BufferedReader
package com.kuang.chapter; import java.io.*; public class TestBufferStream{ public static void main(String args[]){ try{ BufferedWriter bw = new BufferedWriter(new FileWriter("a\\Student.txt")); //在节点流FileWriter的外面再套一层处理流BufferedWriter String s = null; for(int i=0;i<100;i++){ s = String.valueOf(Math.random());//“Math.random()”将会生成一系列介于0~1之间的随机数。 // static String valueOf(double d)这个valueOf()方法的作用就是把 一个double类型的数转换成字符串 //valueOf()是一个静态方法,所以可以使用“类型.静态方法名”的形式来调用 bw.write(s);//把随机数字符串写入到指定文件中 bw.newLine();//调用newLine()方法使得每写入一个随机数就换行显示 } bw.flush();//调用flush()方法清空缓冲区 BufferedReader br = new BufferedReader(new FileReader("a:\\Student.txt")); //在节点流FileReader的外面再套一层处理流BufferedReader while((s = br.readLine())!=null){ //使用BufferedReader处理流里面提供String readLine()方法读取文件中的数据时是一行一行读取的 //循环结束的条件就是使用readLine()方法读取数据返回的字符串为空值后则表 示已经读取到文件的末尾了。 System.out.println(s); } bw.close(); br.close(); }catch(Exception e){ e.printStackTrace(); } } } 转换流InputStreamReader 和 OutputStreamWriter 用于字节数据到字符数据之间的转换
InputStreamReader 需要和 InputStream “套接” 。
OutputStreamWriter 需要和 OutputStream “套接” 。
转换流在构造时可以指定其编码集合
数据流 DataInputStream DataOutputStream 【分别继承自InputStream 和 OutputStream】等-提供将基础数据类型写入到文件中,或者读取出来.提供了可以存取与机器无关的Java原始类型数据(int,double等)的方法。
public static void main(String args[]){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); //在调用构造方法时,首先会在内存里面创建一个ByteArray字节数组 DataOutputStream dos = new DataOutputStream(baos); //在输出流的外面套上一层数据流,用来处理int,double类型的数 try{ dos.writeDouble(Math.random());//把产生的随机数直接写入到字节数组 ByteArray中 dos.writeBoolean(true);//布尔类型的数据在内存中就只占一个字节 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); System.out.println(bais.available()); DataInputStream dis = new DataInputStream(bais); System.out.println(dis.readDouble());//先写进去的就先读出来,调用readDouble()方法读取出写入的随机数 System.out.println(dis.readBoolean());//后写进去的就后读出来,这里面的读取顺序不能更改位置,否则会打印出不正确的结果 dos.close(); bais.close(); }catch(Exception e){ e.printStackTrace(); } } 打印流