ByteArrayOutputStream與InputStream互相轉(zhuǎn)換方式
ByteArrayOutputStream與InputStream互相轉(zhuǎn)換
InputStream 轉(zhuǎn)為 ByteArrayOutputStream
public Reader(InputStream input) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = input.read(buffer)) > -1) {
baos.write(buffer, 0, len);
}
baos.flush();
} catch (IOException e) {
throw new Exception("Illegal flow.");
} finally {
try {
input.close();
} catch (IOException e) {
logger.error("file stream shutdown failed.");
}
}
this.baos = baos;
}
ByteArrayOutputStream 轉(zhuǎn)為 InputStream
private InputStream streamTran(ByteArrayOutputStream in) {
return new ByteArrayInputStream(in.toByteArray());
}
Java字節(jié)數(shù)組流(ByteArrayInputStream和ByteArrayOutputStream)
1、FileInputStream、FileOutputStream、FileReader、FileWriter是存儲在硬盤上的
硬盤上的資源java虛擬機(jī)是無權(quán)直接訪問的,必須借助操作系統(tǒng),java虛擬機(jī)借助完了之后要通知操作系統(tǒng)釋放資源

2、把源頭換成電腦上的一塊內(nèi)存(字節(jié)數(shù)組),既然是一塊內(nèi)存那么java就可以直接訪問,因為是java虛擬機(jī)的一塊內(nèi)存。不用關(guān)閉(釋放)
3、所有的東西都可以轉(zhuǎn)成字節(jié)數(shù)組(字符串轉(zhuǎn)成字節(jié)數(shù)組、任何一個數(shù)據(jù)(包括12、包括3.14、包括一個一個的對象都可以轉(zhuǎn)成字節(jié)數(shù)組))
轉(zhuǎn)成字節(jié)數(shù)組有什么好處?
字節(jié)數(shù)組就為二進(jìn)制了,方便網(wǎng)絡(luò)上進(jìn)行傳輸
4、文件可以無限制的往里面加內(nèi)容,但是內(nèi)存速度快、量小,所以內(nèi)存(字節(jié)數(shù)組)不允許不建議量特別的大

ByteArrayInputStream(byte[] buf) 參數(shù)為一個字節(jié)數(shù)組
創(chuàng)建一個 ByteArrayInputStream ,使其使用 buf作為其緩沖區(qū)數(shù)組
ByteArrayInputStream代碼示例
/*
* ByteArrayInputStream(byte[] buf)
* 創(chuàng)建一個 ByteArrayInputStream ,使其使用 buf作為其緩沖區(qū)數(shù)組
*
* 四個步驟:字節(jié)數(shù)組輸入流
* 1、創(chuàng)建源:字節(jié)數(shù)組 不要太大
* 2、選擇流
* 3、操作
* 4、釋放資源:可以不用處理
*/
public class IOTest07 {
public static void main(String[] args) {
// 1、創(chuàng)建源
byte[] src = "talk is cheap show me the code".getBytes();
// 2、選擇流
InputStream is = null;
try {
is = new ByteArrayInputStream(src);
// 3、操作(分段讀?。?
byte[] flush = new byte[5];//緩沖容器
int len = -1;//接收長度
while((len=is.read(flush))!=-1) {
// 字節(jié)數(shù)組-->字符串(解碼)
String str = new String(flush,0,len);
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 4、 釋放資源
try {
if (null != is) {
is.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
ByteArrayOutputStream代碼示例
/*
* ByteArrayOutputStream()不需要指定(源)目的地()參數(shù)為空,不用傳源頭,寫完之后 主動去數(shù)組里面拿 toByteArray()
*
* 字節(jié)數(shù)組輸出流 ByteArrayOutputStream
* 1、創(chuàng)建源:內(nèi)部維護(hù)(內(nèi)部根據(jù)數(shù)據(jù)要多大給你多大)
* (內(nèi)部根據(jù)數(shù)據(jù)要多大給你多大)當(dāng)數(shù)據(jù)寫入緩沖區(qū)時,緩沖區(qū)會自動增長。 數(shù)據(jù)可以使用toByteArray()和toString()
* 2、選擇流:不關(guān)聯(lián)源
* 3、操作(寫出內(nèi)容)
* 4、釋放資源:可以不用
*
* 獲取數(shù)據(jù):toByteArray
*/
public class IOTest08 {
public static void main(String[] args) {
// 1、創(chuàng)建源:內(nèi)部維護(hù)(內(nèi)部根據(jù)數(shù)據(jù)要多大給你多大)
// ByteArrayOutputStream()不需要指定(源)目的地()參數(shù)為空
byte[] dest = null;
// 新增方法:父類沒有的方法子類有
// 能夠使用多態(tài)的兩種:父類有的方法、子類沒有(為延用)、父類有的方法子類也有(方法重寫)
// 2、選擇流 (因為要使用新增方法(父類沒有的方法子類有),所以不能發(fā)生多態(tài))
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
// 3、操作(寫出)
String msg = "show me the code";
byte[] datas = msg.getBytes();// 字符串-->字節(jié)數(shù)組(編碼)
baos.write(datas, 0, datas.length);
baos.flush();
// 獲取數(shù)據(jù)
dest = baos.toByteArray();
System.out.println(dest.length+"-->"+new String(dest,0,baos.size()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (null != baos) {
baos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
注意:
新增方法:父類沒有的方法子類有
能夠使用多態(tài)的兩種:父類有的方法子類沒有(為延用)、父類有的方法子類也有(方法重寫,子類進(jìn)行實現(xiàn))
選擇流 (因為要使用新增方法(父類沒有的方法子類有),所以不能發(fā)生多態(tài))
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Flask接口如何返回JSON格式數(shù)據(jù)自動解析
這篇文章主要介紹了Flask接口如何返回JSON格式數(shù)據(jù)自動解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
springboot集成JWT實現(xiàn)身份認(rèn)證(權(quán)鑒)的方法步驟
本文主要介紹了springboot集成JWT實現(xiàn)身份認(rèn)證(權(quán)鑒)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
SpringBoot開發(fā)技巧之如何處理跨域請求CORS
CORS(Cross-Origin Resource Sharing)"跨域資源共享",是一個W3C標(biāo)準(zhǔn),它允許瀏覽器向跨域服務(wù)器發(fā)送Ajax請求,打破了Ajax只能訪問本站內(nèi)的資源限制2021-10-10
SpringBoot整合Mybatis-plus案例及用法實例
mybatis-plus是一個 Mybatis 的增強工具,在 Mybatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Mybatis-plus案例及用法實例的相關(guān)資料,需要的朋友可以參考下2022-11-11
Java實現(xiàn)用位運算維護(hù)狀態(tài)碼
位運算是一種非常高效的運算方式,在算法考察中比較常見,那么業(yè)務(wù)代碼中我們?nèi)绾问褂梦贿\算呢,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2024-03-03
SpringCloud gateway+zookeeper實現(xiàn)網(wǎng)關(guān)路由的詳細(xì)搭建
這篇文章主要介紹了SpringCloud gateway+zookeeper實現(xiàn)網(wǎng)關(guān)路由,本文通過圖文實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08

