Java I/O 教程(六) BufferedInputStream 類
Java BufferedInputStream Class
Java BufferedInputStream class 用於從輸入流讀取資料,和BufferedOutStream一樣內部使用緩衝機制提高讀取效能。
需要注意的是:
當讀取流中位元組時,內部緩衝區每次會自動重新填滿多個位元組。
當一個緩衝輸入流建立時,一個內部緩衝區陣列也會建立。
類定義
public class BufferedInputStream extends FilterInputStream
建構函式
Creates a BufferedInputStream and saves its argument, the input stream in, for later use.
BufferedInputStream(InputStream in, int size)
Creates a BufferedInputStream with the specified buffer size, and saves its argument, the input stream in, for later use.
方法
int available() 返回輸入流中預計可讀取位元組數int read() 從輸入流讀取下一個位元組
int read(byte[] b, int off, int ln) 從指定的byte輸入流接收資料後寫入指定位元組陣列中,從指定偏移量開始
void close() 關閉輸入流並釋放任何與流相關的系統資源
void reset() 復位在mark方法最後一次呼叫的位置
void mark(int readlimit) 其實就是給輸入流在讀取到某個位元組時候打個標記,讓reset方法能夠回到這個標記的位置
long skip(long x) 跳過並拋棄x個位元組
boolean markSupported() 用於測試輸入流是否支援mark和reset方法
例子
package com.dylan.io;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* @author xusucheng
* @create 2018-01-01
**/
public class BufferedInputStreamExample {
public static void main(String[] args) {
try {
FileInputStream fin = new FileInputStream("D:\\testout.txt");
BufferedInputStream bin = new BufferedInputStream(fin);
int i;
while ((i = bin.read()) != -1) {
//如果是中文,此方法不支援
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
輸出:Hello java.io!
關於mark和reset方法例子
package com.dylan.io;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* @author xusucheng
* @create 2018-01-01
**/
public class BufferedInputStreamMarkReset {
public static void main(String[] args) throws Exception {
InputStream iStream = null;
BufferedInputStream bis = null;
try {
// read from file c:/test.txt to input stream
iStream = new FileInputStream("D:/testmark.txt");
// input stream converted to buffered input stream
bis = new BufferedInputStream(iStream);
// read and print characters one by one
System.out.println("Char : " + (char) bis.read());
System.out.println("Char : " + (char) bis.read());
System.out.println("Char : " + (char) bis.read());
// mark is set on the input stream
bis.mark(0);
System.out.println("Char : " + (char) bis.read());
System.out.println("reset() invoked");
// reset is called
bis.reset();
// read and print characters
System.out.println("char : " + (char) bis.read());
System.out.println("char : " + (char) bis.read());
} catch (Exception e) {
e.printStackTrace();
} finally {
// releases any system resources associated with the stream
if (iStream != null)
iStream.close();
if (bis != null)
bis.close();
}
}
}
輸出:
Char : A
Char : B
Char : C
Char : D
reset() invoked
char : D
char : E
下一章
Java I/O 教程(七) DataOutputStream和DataInputStream
相關文章
- Java™ 教程(命令列I/O)Java命令列
- 《Java 高階篇》六:I/O 流Java
- Java I/OJava
- 【java】I/O流Java
- Java(8)I/OJava
- Python教程:精簡概述I/O模型與I/O操作Python模型
- JAVA I/O系統Java
- Java 非同步 I/OJava非同步
- 深入理解Java I/O模型Java模型
- "萬字" Java I/O 詳解Java
- Java I/O模型及其底層原理Java模型
- 計算機I/O與I/O模型計算機模型
- Java NIO學習系列五:I/O模型Java模型
- I/O流
- 【雜談】Java I/O的底層實現Java
- Java非阻塞I/O模型之NIO說明Java模型
- Netty權威指南:Java的I/O演進NettyJava
- 關於I/O
- c++ I/OC++
- 五種I/O模型和Java NIO原始碼分析模型Java原始碼
- “挑三揀四”地學一學Java I/OJava
- Java中I/O流:阻塞和非阻塞範例Java
- Java I/O流 複製檔案速度對比Java
- 系統級 I/O
- Google I/O Extend 2018Go
- 網路I/O模型模型
- NodeJs 非同步 I/ONodeJS非同步
- 理解I/O Completion Port
- python 非同步 I/OPython非同步
- 02. I/O 操作
- Hadoop的I/O操作Hadoop
- Java I/O系統學習系列一:File和RandomAccessFileJavarandomMac
- Linux下的5種I/O模型與3組I/O複用Linux模型
- Java NIO系列教程(六) SelectorJava
- 服務端 I/O 效能:Node、PHP、Java、Go 的對比服務端PHPJavaGo
- 【面試】I/O 複用面試
- 流?I/O 操作?阻塞?epoll?
- I/O模型、Libuv和Eventloop模型OOP
- 由Nodejs來說I/ONodeJS