Java自我学习路线
缓冲流一、BufferedReader(字符输入缓冲流)构造方法1. BufferedReader(Reader in)2. BufferedReader(Reader in, int sz)
二、JDK中实现自动关闭流三、测试用例四、转换流InputStreamReader
缓冲流
缓冲流主要是为了提高效率而存在的,减少物理读取次数,缓冲流主要有:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低,带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里,等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,提高速度因为实现了缓冲功能,所以要注意在使用BufferedInputStream、BufferedOutputStream写完数据后,要调用flush()方法或close()方法,强行将缓冲区中的数据写出,否则可能无法写出数据BufferedReader 提供了实用方法readLine(),可以直接读取一行,但不带换行符BufferedWriter 提供了 newLine()可以写换行符
一、BufferedReader(字符输入缓冲流)
BufferedReader是带有缓冲区的字符输入流,使用这个流的时候不需要自定义char数组(byte数组),因为BufferedReader自带缓冲
构造方法
构造方法中传进来的流叫做节点流,直接与数据源相连,用于输入或者输出外部负责包装的这个流,叫做:包装流/处理流,是在节点流的基础上对之进行加工,进行一些功能的扩展,处理流的构造方法必须要传入节点流的子类,对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭( in.close() )节点流与包装流是相对而言的构造方法中的形参Reader是一个抽象类(public abstract class Reader implements Readable, Closeable) ,没有办法实例化对象,所以可以使用它的子类实例化对象,比如FileReader(FileReader ->InputStreamReader->Reader)
1. BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流
public BufferedReader(Reader in
) {
this(in
, defaultCharBufferSize
);
}
2. BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流
public BufferedReader(Reader in
, int sz
) {
super(in
);
if (sz
<= 0)
throw new IllegalArgumentException("Buffer size <= 0");
this.in
= in
;
cb
= new char[sz
];
nextChar
= nChars
= 0;
}
二、JDK中实现自动关闭流
对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭( in.close() )
public void close() throws IOException
{
synchronized (lock
) {
if (in
== null
)
return;
try {
in
.close();
} finally {
in
= null
;
cb
= null
;
}
}
}
三、测试用例
import java
.io
.BufferedReader
;
import java
.io
.FileReader
;
public class BufferedReaderTest {
public static void main(String
[] args
) throws Exception
{
FileReader reader
= new FileReader("file");
BufferedReader br
= new BufferedReader(reader
);
String s
= null
;
while ((s
= br
.readLine()) != null
) {
System
.out
.print(s
);
}
br
.close();
}
}
四、转换流InputStreamReader
BufferedReader的构造方法中只能传一个字符流,不能传字节流,所以使用 InputStreamReader 将字节流输入流转换成字符输入流
import java
.io
.BufferedReader
;
import java
.io
.FileInputStream
;
import java
.io
.InputStreamReader
;
public class BufferedReaderTest {
public static void main(String
[] args
) throws Exception
{
FileInputStream in
= new FileInputStream("file");
InputStreamReader reader
= new InputStreamReader(in
);
BufferedReader br
= new BufferedReader(reader
);
String line
= null
;
while ((line
= br
.readLine()) != null
) {
System
.out
.println(line
);
}
br
.close();
}
}