Java的字節(jié)緩沖流與字符緩沖流解析
高級流
- 緩沖流
- 轉(zhuǎn)換流
- 序列化流
- 打印流
- 壓縮流
- Commons-io

緩沖流
基本流的效率太慢了,都加上緩沖區(qū)

字節(jié)緩沖流
原理:底層自帶了長度為8192的緩沖區(qū)提高性能
| 方法名稱 | 說明 |
| public BufferedInputStream(InputStream is) | 把基本流包裝成高級流,提高讀取數(shù)據(jù)的性能 |
| public BufferedOutputStream(OutputStream os) | 把基本流包裝成高級流,提高讀取數(shù)據(jù)的性能 |
練習(xí):拷貝文件
- 利用字節(jié)緩沖流拷貝文件(一次讀寫一個字節(jié))
public class BufferedStreamDemo1 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/Users/jessy/Desktop/offer50/aaa/aaacopy.txt"));
int b;
while ((b = bis.read()) != -1) {
bos.write(b);
}
bos.close();
bis.close();
}
}
- 利用字節(jié)緩沖流拷貝文件(一次讀寫一個字節(jié)數(shù)組)
public class BufferedStreamDemo2 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/Users/jessy/Desktop/offer50/aaa/aaacopy.txt"));
byte[] bytes = new byte[1024];
int len;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
bos.close();
bis.close();
}
}
字節(jié)緩沖流提高效率的原理

字符緩沖流
原理:底層自帶了長度為8192的緩沖區(qū)提高性能
| 方法名稱 | 說明 |
| public BufferedReader(Reader r) | 把基本流變成高級流 |
| public BufferedWriter(Writer r) | 把基本流變成高級流 |
- 特有方法
| 字符緩沖輸入流特有方法 | 說明 |
| public String readLine() | 讀取一行數(shù)據(jù),如果沒有數(shù)據(jù)可讀了,會返回null |
- 細(xì)節(jié):
- readLine方法在讀取的時候,一次讀一整行,遇到回車換行結(jié)束
- 但是他不會把回車換行讀到內(nèi)存當(dāng)中
| 字符緩沖輸出流特有方法 | 說明 |
| public void newLine() | 跨平臺的換行 |
public class BufferedStreamDemo3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
String line;
while (((line = br.readLine()) != null)) {
System.out.println(line);
}
br.close();
}
}
public class BufferedStreamDemo4 {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/jessy/Desktop/offer50/aaa/b.txt", true));
bw.write("朵朵是貓貓呀!!");
//換行
bw.newLine();
bw.write("可是你不是貓貓!");
bw.newLine();
bw.close();
}
}
總結(jié)
- 緩沖流有幾種?
- 字節(jié)緩沖輸入流 BufferedInputStream
- 字節(jié)緩沖輸出流 BufferedOutputStream
- 字符緩沖輸入流 BufferedReader
- 字符緩沖輸出流 BufferedWriter
- 緩沖流為什么能提高性能
- 緩沖自帶長度為8192的緩沖區(qū)
- 可以顯著提高字節(jié)流的讀寫性能
- 對于字符流提升不明顯,對于字符緩沖流而言關(guān)鍵點是兩個特有方法
- 字符緩沖流兩個特有方法是什么?
- 字符緩沖輸入流BufferedReader :readLine()
- 字符緩沖輸出流 BufferedWriter:newLine()
到此這篇關(guān)于Java的字節(jié)緩沖流與字符緩沖流解析的文章就介紹到這了,更多相關(guān)Java的字節(jié)字符緩沖流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows10 JDK安裝及配置環(huán)境變量與Eclipse安裝教程
這篇文章主要介紹了windows10 JDK安裝及配置環(huán)境變量與Eclipse安裝,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
Mybatis實現(xiàn)自定義的typehandler三步曲
這篇文章主要介紹了Mybatis實現(xiàn)自定義的typehandler三步曲的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
如何解決java.net.BindException:地址已在使用問題
當(dāng)Zookeeper啟動報錯“java.net.BindException:地址已在使用”時,通常是因為指定的端口已被其他進(jìn)程占用,解決這個問題需要按照以下步驟操作:首先,使用命令如lsof -i:2181找到占用該端口的進(jìn)程號;其次,使用kill命令終止該進(jìn)程2024-09-09
Spring之SseEmitter實現(xiàn)讓你的進(jìn)度條實時更新
Spring SseEmitter是一種實現(xiàn)服務(wù)器端推送事件(SSE)的機制,支持單向通信,適用于實時數(shù)據(jù)傳輸需求,通過代碼示例和應(yīng)用場景分析,展示了如何在服務(wù)端和客戶端使用SseEmitter進(jìn)行實時數(shù)據(jù)推送2025-02-02
Spring Cloud Ribbon實現(xiàn)客戶端負(fù)載均衡的示例
本篇文章主要介紹了Spring Cloud Ribbon實現(xiàn)客戶端負(fù)載均衡的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例
這篇文章主要介紹了關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
MybatisPlus #{param}和${param}的用法詳解
這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

