網(wǎng)站首頁 編程語言 正文
Java標(biāo)準庫的java.io.InputStream定義了所有輸入流的超類:
FileInputStream實現(xiàn)了文件流輸入;
BufferedInputStream使用緩沖區(qū)提高文件的讀取效率;
ByteArrayInputStream在內(nèi)存中模擬一個字節(jié)流輸入;
一. FileInputStream(文件輸入流)
FileInputStream是InputStream的子類,是從文件流中讀取數(shù)據(jù),每次讀取都是從硬盤中讀取,讀取速度較慢;
InputStream中通過 read()方法讀取輸入流的下一字節(jié),并返回字節(jié)表示的 int 值(0 ~ 255),如果讀到-1就不能繼續(xù)讀取;
InputStream緩沖讀取:先定義一個byte[]數(shù)組作為緩沖區(qū),read()方法會盡可能多的讀取字節(jié)到緩沖區(qū),但不會超過緩沖區(qū)的大小。
利用緩沖區(qū)一次讀取InputStream的所有字節(jié)(兩種方法):
(1)? 逐個字節(jié)讀取;(2)批量讀取。
代碼實現(xiàn)如下:
try (InputStream in = new FileInputStream("D:\\countNumber.text")) {
// 方式1:逐個字節(jié)讀取
// int data = -1;
// while((data = in.read()) != -1) {
// System.out.println((char)data);
// }
// 方式2:批量讀取
byte[] buff = new byte[1000]; // 定義1000個字節(jié)大小的緩沖區(qū)
int size = -1;
while((size = in.read(buff)) != -1) {
System.out.println();
}
} catch (IOException e1) {
e1.printStackTrace();
}
二 . BufferedInputStream(緩沖輸入流)
BufferedInputStream是緩沖輸入流(帶有緩沖區(qū)的字節(jié)輸入流),繼承于FilterInputStream(是InputStream的子類),作用是為另一個輸入流添加一些功能:提供緩沖功能以及支持“mark() 標(biāo)記”,“reset()重置方法";
BufferedInputStream本質(zhì)是通過一個內(nèi)部緩沖區(qū)數(shù)組實現(xiàn)的,它有一個默認大小為8192的緩沖區(qū)(讀取速度較快)。例如,在新建某輸入流對應(yīng)的BufferedInputStream后,當(dāng)我們通過read()讀取輸入流的數(shù)據(jù)時,BufferedInputStream會將該輸入流的數(shù)據(jù)分批的填充到緩沖區(qū)中。每當(dāng)緩沖區(qū)的數(shù)據(jù)被讀完之后,輸入流會再次填充數(shù)據(jù)緩沖區(qū);如此反復(fù),直到我們讀完輸入流數(shù)據(jù)位置。
public class BufferedInputStream extends FilterInputStream {
private static int DEFAULT_BUFFER_SIZE = 8192;
...}
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\countNumber.text"))) {
// 方式1:逐個字節(jié)讀取
// int data = -1;
//while((data = bis.read()) != -1) {
// System.out.println(data);
// }
// 方式2:批量讀取
byte[] buffData = new byte[128]; // 用來存儲每次讀取到的字節(jié)數(shù)組
int len = -1; // 每次讀取到的字節(jié)數(shù)組的長度
while((len = bis.read(buffData)) != -1) {
System.out.println(Arrays.toString(buffData));
}
} catch (IOException e) {
e.printStackTrace();
}
?注:如果打開了一個文件進行讀寫,完成后要及時關(guān)閉,以便讓os釋放資源 (try語句:快捷鍵:shift+alt+z,編譯器會自動寫入finally并調(diào)用close()),實際上,編譯器并不會特別的為InputStream加上自動關(guān)閉,而是因為其實現(xiàn)了AutoCloseable接口,由于實現(xiàn)了此接口,才會自動寫入finally并調(diào)用close();
原文鏈接:https://blog.csdn.net/weixin_45939128/article/details/124851050
相關(guān)推薦
- 2022-05-11 python?DataFrame數(shù)據(jù)分組統(tǒng)計groupby()函數(shù)的使用_python
- 2022-09-24 一文詳解Golang協(xié)程調(diào)度器scheduler_Golang
- 2022-11-29 .NET中l(wèi)ambda表達式合并問題及解決方法_實用技巧
- 2022-08-29 Python使用re模塊實現(xiàn)正則表達式操作指南_python
- 2022-09-04 Go?錯誤處理實踐總結(jié)示例_Golang
- 2022-11-06 Golang常用包使用介紹_Golang
- 2022-11-17 Python讀取postgresql數(shù)據(jù)庫詳情_python
- 2022-11-25 Vmware臨時文件存放路徑_VMware
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支