BufferedInputStream
是缓冲输入流,继承于FilterInputStream
,作用是为另一个输入流添加一些功能,本质上是通过一个内部缓冲数组实现的。例如,在新建某输入流对应的BufferedInputStream
后,当通过read
读取数据时,BufferedInputStream
会将输入流的数据分批地填入到缓冲区中,每当缓冲区的数据读完之后,输入流会再次填充数据缓冲区,直到读完数据。
BufferedInputStream
主要的函数如下:
BufferedInputStream(InputStream in);
BufferedInputStream(InputStream in, int size);
synchronized int available();
void close();
synchronized void mark(int readlimit);
boolean markSupported();
synchronized int read();
synchronized int read(byte[] buffer, int offset, int byteCount);
synchronized void reset();
synchronized long skip(long byteCount);
代码示例如下:
import java.io.*;
public class BufferedInputStreamTest {
static void readFromFile(String filename) { /* 从文件中读取文本 */
BufferedInputStream bufferedInput = null;
byte[] buffer = new byte[1024];
try {
/* 创建BufferedInputStream对象 */
bufferedInput = new BufferedInputStream(new FileInputStream(filename));
int bytesRead = 0;
/* 从文件中按字节读取内容,到文件尾部时,read方法将返回“-1” */
while ((bytesRead = bufferedInput.read(buffer)) != -1) {
String chunk = new String(buffer, 0, bytesRead); /* 将读取的字节转为字符串对象 */
System.out.print(chunk);
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
if (bufferedInput != null)
bufferedInput.close(); /* 关闭BufferedInputStream */
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
readFromFile("src/hello.txt");
}
}