1.缓冲流介绍
1) 缓冲流要“套接”在相应的节点上,对读写的数据提供了缓冲的功能,提高读写的效率,同时增加了一些新的方法。
2) J2SDK提供了四种缓存流,其常用的构造方法为:
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(OutputStream out)
BufferedOutputStream(OutputStream out, int size)
3) 缓冲输入流支持父类的mark和reset方法。
4) BufferedReader提供了readLine方法用于读取一行字符串(以\r或\n分隔)。
5) BufferedWriter提供newLine用于写入一个行分隔符。
6) 对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法会将内存中的数据立刻写出。
2. 缓冲流例子一
package com.owen.io;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 使用BufferedInputStream的缓冲流,处理读取字节流
*
* @author OwenWilliam 2016-7-19
* @since
* @version v1.0.0
*
*/
public class TestBufferStream1
{
public static void main(String[] args)
{
try
{
FileInputStream fis = new FileInputStream(
"E:/workspace/Java/IO/src/com/owen/io/TestFileWriter.java");
BufferedInputStream bis = new BufferedInputStream(fis);
int c = 0;
System.out.println(fis.read());
System.out.println(bis.read());
// 从第100个字符读起
bis.mark(100);
for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++)
{
System.out.print((char) c + " ");
}
System.out.println();
// 重置回到第100个字符的位置
bis.reset();
for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++)
{
System.out.print((char) c + " ");
}
bis.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
3.缓冲流例子二
package com.owen.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 使用BufferedWriter和BufferedReader实现写入与写出
*
* @author OwenWilliam 2016-7-19
* @since
* @version v1.0.0
*
*/
public class TestBufferStream2
{
public static void main(String[] args)
{
try
{
// 写入文件
BufferedWriter bw = new BufferedWriter(new FileWriter(
"E:/workspace/Java/IO/src/com/owen/io/data2.txt"));
// 读取文件
BufferedReader br = new BufferedReader(new FileReader(
"E:/workspace/Java/IO/src/com/owen/io/data2.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();
}
}
}