之前已经简单介绍过IO流的输入输出基础,这次介绍增强IO输入输出流功能的Buffered
通过以下图,本来IO流有吸管大小功能,通过Buffered吸管变大,功能增加
下面我们通过代码来实现实际功能,先介绍BufferedInputStream,首先我们先查看api
看到有构造方法,说明我们要使用要用new,然后在BufferedInputStream后的参数需要传入一个InputStream类,我们先新建一个“zzq.txt”,通过new一个BufferedInputStream,传入InputStream的子类FileInputStream,通过构建一个数组,初始化int,然后写一个while循环读取,当不等于-1说明读取还没有结束(可以通过把鼠标放在read上面查看read的return返回值来使用),这样我们就可以读取“zzq.txt”里面的内容了
public static void test1() {
try {
BufferedInputStream is = new BufferedInputStream(new FileInputStream("zzq.txt"));
byte b[] = new byte[1024];
int i = 0;
while((i=is.read(b))!=-1){
System.out.println(new String(b));
}
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在上面的代码里可能看不出Buffered的作用,下面介绍BufferedReader的用法,首先还是先查看api
看到构造方法,所以要使用它得new一个,然后看到它的方法摘要,可以读取一个文本行,因为Buffered提供了一个缓存空间,我们可以把正行内容都读取然后放在缓存空间,最后再一次性读出来,而不是之前的一个字节一个字节的读取了,下面我们开始上代码:通过api知道BufferedReader里面放一个Reader参数,所以我们把InputStreamReader放进去,然后我们要读取一个文件,所以我们在InputStreamReader里面放一个FileInputStream,然后使用while循环读取,用ready判断流是否准备好,然后用readLine重复读取一整行,最后输出读取到的内容,用Buffered包装可以增加直接读取一行而不用写一个数组的功能,还有修改字符编码格式的功能
public static void test2() {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream("zzq.txt")));
while (br.ready()) {
String str = br.readLine();
System.out.println(str);
}
} catch (UnsupportedEncodingException | FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
接下来介绍BufferedWrite的用法,首先还是先看api
看到构造方法,所以要使用首先就要new一个,然后看到BufferedWrite后面要加一个Writer参数,把OutputStreamWriter放进去,然后我们要写入到一个文件,所以使用FileOutputStream,这样,在后面的参数,可以加入文件名,还有当我们输入新的内容时可以设置不覆盖(默认是false覆盖,true就是不覆盖),还可以使用newLine用法,增加一个换行符,使OutputStream功能更加强大
public static void test3() {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("zzq.txt", true)));
bw.write("哈喽");
bw.newLine();
bw.write("我是zzq");
bw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
当然还有其他的类及方法,上面通过查阅api及简单的用法进行说明,如果需要其他功能,可以通过查阅api来使用,(附)中文在线api文档:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh