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是存儲(chǔ)在硬盤(pán)上的
硬盤(pán)上的資源java虛擬機(jī)是無(wú)權(quán)直接訪問(wèn)的,必須借助操作系統(tǒng),java虛擬機(jī)借助完了之后要通知操作系統(tǒng)釋放資源

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

ByteArrayInputStream(byte[] buf) 參數(shù)為一個(gè)字節(jié)數(shù)組
創(chuàng)建一個(gè) ByteArrayInputStream ,使其使用 buf作為其緩沖區(qū)數(shù)組
ByteArrayInputStream代碼示例
/*
* ByteArrayInputStream(byte[] buf)
* 創(chuàng)建一個(gè) ByteArrayInputStream ,使其使用 buf作為其緩沖區(qū)數(shù)組
*
* 四個(gè)步驟:字節(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;//接收長(zhǎng)度
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ù)為空,不用傳源頭,寫(xiě)完之后 主動(dòng)去數(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ù)寫(xiě)入緩沖區(qū)時(shí),緩沖區(qū)會(huì)自動(dòng)增長(zhǎng)。 數(shù)據(jù)可以使用toByteArray()和toString()
* 2、選擇流:不關(guān)聯(lián)源
* 3、操作(寫(xiě)出內(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;
// 新增方法:父類(lèi)沒(méi)有的方法子類(lèi)有
// 能夠使用多態(tài)的兩種:父類(lèi)有的方法、子類(lèi)沒(méi)有(為延用)、父類(lèi)有的方法子類(lèi)也有(方法重寫(xiě))
// 2、選擇流 (因?yàn)橐褂眯略龇椒?父類(lèi)沒(méi)有的方法子類(lèi)有),所以不能發(fā)生多態(tài))
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
// 3、操作(寫(xiě)出)
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();
}
}
}
}
注意:
新增方法:父類(lèi)沒(méi)有的方法子類(lèi)有
能夠使用多態(tài)的兩種:父類(lèi)有的方法子類(lèi)沒(méi)有(為延用)、父類(lèi)有的方法子類(lèi)也有(方法重寫(xiě),子類(lèi)進(jìn)行實(shí)現(xiàn))
選擇流 (因?yàn)橐褂眯略龇椒?父類(lèi)沒(méi)有的方法子類(lèi)有),所以不能發(fā)生多態(tài))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java如何取掉json數(shù)據(jù)中值為null的屬性字段
這篇文章主要介紹了Java如何取掉json數(shù)據(jù)中值為null的屬性字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring?Boot項(xiàng)目中使用OpenAI-Java的示例詳解
Spring?Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程,這篇文章主要介紹了Spring?Boot項(xiàng)目中使用OpenAI-Java的示例詳解,需要的朋友可以參考下2023-04-04
HttpClient實(shí)現(xiàn)表單提交上傳文件
這篇文章主要為大家詳細(xì)介紹了HttpClient實(shí)現(xiàn)表單提交上傳文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
springboot自帶的緩存@EnableCaching用法
這篇文章主要介紹了springboot自帶的緩存@EnableCaching用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
使用Java實(shí)現(xiàn)qq郵箱發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了使用Java實(shí)現(xiàn)qq郵箱發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2010-05-05
SpringMVC用JsonSerialize日期轉(zhuǎn)換方法
下面小編就為大家?guī)?lái)一篇SpringMVC用JsonSerialize日期轉(zhuǎn)換方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起 小編過(guò)來(lái)看看吧2016-11-11

