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)存速度快、量小,所以內(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-03Spring?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-04HttpClient實(shí)現(xiàn)表單提交上傳文件
這篇文章主要為大家詳細(xì)介紹了HttpClient實(shí)現(xiàn)表單提交上傳文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08springboot自帶的緩存@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-05SpringMVC用JsonSerialize日期轉(zhuǎn)換方法
下面小編就為大家?guī)?lái)一篇SpringMVC用JsonSerialize日期轉(zhuǎn)換方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起 小編過(guò)來(lái)看看吧2016-11-11