JavaShuo
欄目
標籤
Java IO流
時間 2020-05-15
標籤
java
欄目
Java
简体版
原文
原文鏈接
概述
IO流用來處理設備之間的數據傳輸 (上傳文件和下載文件)
java對數據的操做時經過流的方式
java用於操做流的對象都在IO包中
IO流分類
流向分:
輸入流(把文本拿到控制檯, 讀取數據)
輸出流(把文本寫到文件中, 寫出數據)
數據類型分:
字節流
字符流(1個字符等於兩個字節流,爲了方便操做文本數據,Java就提供了字符流)
注:若是操做文本數據,就用字符流,其餘狀況就用字節流
四個基(抽象)類 InputStream OutputStream Reader Writer
IO第一個案例 : 往一個文本文件中輸入一句話:hello io 採用 OutputStream
每種基類的子類都是以父類名做爲後綴名
OutputStream 的子類FileOutputStream的構造方法
FileOutputStream(File file)
FileOutputStream(String name)
用FileOutputStream的對象先調用write而後調用close(爲何要有close,1.讓流對象關閉,2.通知系統釋放有關的資源) 共三步
字節流寫數據的方式有三個
void write(int b) 一個字節
void write(byte[] b) 字節數組
void write(byte[] b, int off, int len) 字節數組的一部分
字節流寫數據常見問題
建立字節輸出流作了哪些事情?
系統建立文件 建立fileoutputstream對象 把對象指向文件
數據寫成功後,爲何要close()?
讓對象變成垃圾 讓系統去釋放資源
如何實現數據的追加寫入
FileOutputStream(File file, true)
FileOutputStream(String name, true)
如何實現數據的換行?
"\n"
字節流寫數據加入異常處理
分開作異常處理 三步三個try(可讀性差,通常不用)
一塊兒作
FileInputStream
int read() 今後輸入流中讀取一個數據字節 (若到文件末尾則返回-1)
int read(byte[] b) 今後輸入流中將最多b.length個字節的數據讀入到一個byte數組中 數組長度通常是1024或1024大的整數倍
返回值是實際讀取的字節個數
會了,讀寫文件,練習複製文件
兩個注意:數據源:從哪裏來 目的地:到哪裏去
在計算機中中文的存儲分兩個字節 第一個字節確定是負數,第二個字節可能有正數,可是沒影響
字節緩衝流
字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快不少,這是加入了數組這樣的緩衝區效果,java自己在設計的時候,也考慮了這樣的設計思想(裝飾設計模式),因此提供了字節緩衝區流 ,這種類,也被稱爲緩衝區類(高效類) 包含 字節緩衝輸出流 BufferedOutputStream字節緩衝區輸入流 BufferedInputStream(2個構造)
構造方法能夠指定緩衝區大小,可是咱們通常用不上,由於默認的緩衝區大小就足夠了
爲何不傳遞一個具體的文件或者文件路徑,而是傳遞一個OutputStream對象呢?
由於字節緩衝區流僅僅提供緩衝區,爲高效而設計,可是真正的讀寫操做仍是得靠基本的流對象實現 (new BufferedOutputStream(OutputStream out))
讀對象:BufferedInputStream 用法跟FileInputStream同樣 read() 和read(char[] c)
寫對象:BufferedOutputStream write(char[] a)
字節流四種方式複製文件:
* 基本字節流一次讀取一個字節
* 基本字節流一次讀取一個字節數組
* 高效字節流一次讀取一個字節
* 高效字節流一次讀取一個字節數組
字符流
概述:因爲字節流操做中文不是特別方便,因此,java就提供了轉換流
字符流 = 字節流 + 編碼表
什麼叫編碼表
ASCII碼錶 (美國標準信息交換碼) 一個字節的7個位(-128-127)表示一個字符 最高位爲符號位
ISO-8859-1 拉丁碼錶 歐洲碼錶 8位表示一個數據 0-255
gb2312 簡體中文
gbk 加入更多中文文字符號
gb18030 gbk的取代版本
BIG-5碼 繁體碼錶
Unicode 國際標準碼 兩個本身表示 java默認Unicode
UTF -8 最多三個字節表示一個字符 能用一個就用一個 一個表示不了就用兩個 實在不行就用三個 能夠與 ASCII兼容
字符串中的編碼問題
String類的一個構造方法 String(byte[] bytes, String charsetName):經過指定的字符集
解碼
字節數組
byte[] getBytes(String charsetName) 使用指定的字符集將string
編碼
爲byte序列
編碼: 把看的懂的變成看不懂的 解碼:相反
編碼問題簡單,只要編碼解碼的格式是一致的,就不會有問題
IO的編解
OutputStreamWriter(OutputStream out):字符流 把字節流轉換爲字符流
必須經過轉換流才能作
OutputStreamWriter(OutputStream out, String charsetName):字符流 根據指定編碼把字節流轉換爲字符流
InputStreamReader(InputStream is) (此處可讀取字符數組)
InputStreamReader(InputStream is, String charsetName) 用指定字符編碼來讀取
OutputStreamWriter 的write() 方法共五個重載
void write(int c) 寫一個字符
void write(char[] cbuf) 寫一個字符數組
void write(char[] cbuf, int off, int len)
void write(String str) 寫一個字符串
void write(String str, int off, int len)
注意:字符流寫數據記得要 void flush() 一下
運行close() 方法時,默認先刷新一下
close() 和 flush()的區別
close()關閉流對象,可是要刷新一次緩衝區,關閉以後,流對象不能在寫數據了
flush()僅僅刷新緩衝區,刷新後流對象還能繼續使用(只有在數據量很大的狀況下才須要flush())
相關文章
1.
JAVA IO流
2.
java IO流
3.
Java | IO流
4.
java IO流 5、
5.
java的IO流
6.
Java IO流
7.
java io print流
8.
Java IO 流(二)
9.
Java之IO流
10.
java io流
更多相關文章...
•
Rust 文件與 IO
-
RUST 教程
•
XSL-FO 流
-
XSL-FO 教程
•
Java 8 Stream 教程
•
☆基於Java Instrument的Agent實現
相關標籤/搜索
IO流
Java IO
面試之java io流
1.io
io&process
framework7.io
c#io
264.io
Java
MyBatis教程
MySQL教程
PHP教程
java
Java 8
Java Agent
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
以實例說明微服務拆分(以SpringCloud+Gradle)
2.
idea中通過Maven已經將依賴導入,在本地倉庫和external libraries中均有,運行的時候報沒有包的錯誤。
3.
Maven把jar包打到指定目錄下
4.
【SpringMvc】JSP+MyBatis 用戶登陸後更改導航欄信息
5.
在Maven本地倉庫安裝架包
6.
搭建springBoot+gradle+mysql框架
7.
PHP關於文件$_FILES一些問題、校驗和限制
8.
php 5.6連接mongodb擴展
9.
Vue使用命令行創建項目
10.
eclipse修改啓動圖片
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
JAVA IO流
2.
java IO流
3.
Java | IO流
4.
java IO流 5、
5.
java的IO流
6.
Java IO流
7.
java io print流
8.
Java IO 流(二)
9.
Java之IO流
10.
java io流
>>更多相關文章<<