摘要:此類中的方法在關(guān)閉此流后仍可被調(diào)用,而不會產(chǎn)生任何。主要的功能是從緩沖區(qū)讀取字節(jié)構(gòu)造函數(shù)創(chuàng)建一個,使用作為其緩沖區(qū)數(shù)組。緩沖區(qū)會隨著數(shù)據(jù)的不斷寫入而自動增長。
內(nèi)存操作流
ByteArrayInputStream之前的所有的流操作都是針對文件的,但是有時候只是想要實現(xiàn)數(shù)據(jù)間轉(zhuǎn)換,此時如果我們想要創(chuàng)建一個文件然后再刪除文件,那樣顯得有點麻煩,因此此時的內(nèi)存操作流就顯得很適合這類的操作,因為它只是在內(nèi)存中存儲,并不會真正的創(chuàng)建文件,內(nèi)存操作流涉及的兩個類是ByteArrayInputStream,ByteArrayOutputStream.
構(gòu)造函數(shù)ByteArrayInputStream 包含一個內(nèi)部緩沖區(qū),該緩沖區(qū)包含從流中讀取的字節(jié)。內(nèi)部計數(shù)器跟蹤 read 方法要提供的下一個字節(jié)。
關(guān)閉 ByteArrayInputStream 無效。此類中的方法在關(guān)閉此流后仍可被調(diào)用,而不會產(chǎn)生任何 IOException。
主要的功能是從緩沖區(qū)讀取字節(jié)
常用的方法ByteArrayInputStream(byte[] buf) 創(chuàng)建一個 ByteArrayInputStream,使用 buf 作為其緩沖區(qū)數(shù)組。
ByteArrayInputStream(byte[] buf, int offset, int length) 創(chuàng)建 ByteArrayInputStream,使用 buf 作為其緩沖區(qū)數(shù)組。
實例close() 不過對這個無效,因為關(guān)閉之后仍然可以使用函數(shù)讀取而不報錯
int read() 從緩沖區(qū)中讀取一個字節(jié)
int read(byte[] bytes) 將緩沖區(qū)中的內(nèi)容讀取到數(shù)組中
int read(byte[] bytes,int off,int len) 將最多 len 個數(shù)據(jù)字節(jié)從此輸入流讀入 byte 數(shù)組。
long skip(long n) 從此輸入流中跳過 n 個輸入字節(jié)。
void reset() 將此 byte 數(shù)組輸出流的 count 字段重置為零,從而丟棄輸出流中目前已累積的所有輸出(清除緩沖區(qū))
public class demo8 { public static void main(String args[]) { String str = "chenjiabing 陳加兵"; byte[] bytes = str.getBytes(); //創(chuàng)建一個數(shù)組 ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); //使用bytes作為緩沖區(qū)數(shù)組 int temp = 0; /*第一種方法讀取緩沖區(qū)中的數(shù)據(jù),這個和文件的操作不一樣,這個可以直接沖緩沖區(qū)中讀取數(shù)據(jù)字節(jié)*/ while ((temp = inputStream.read()) != -1) { System.out.print((char) temp); } /*創(chuàng)建數(shù)組用于存儲讀取的內(nèi)容,下面是第二種讀取數(shù)據(jù)的方法*/ byte[] b = new byte[bytes.length]; try { int len = inputStream.read(b); } catch (IOException e) { e.printStackTrace(); } System.out.println(new String(b)); } }ByteArrayOutputStream
構(gòu)造函數(shù)此類實現(xiàn)了一個輸出流,其中的數(shù)據(jù)被寫入一個 byte 數(shù)組。緩沖區(qū)會隨著數(shù)據(jù)的不斷寫入而自動增長。可使用 toByteArray() 和 toString() 獲取數(shù)據(jù)。
關(guān)閉 ByteArrayOutputStream 無效。此類中的方法在關(guān)閉此流后仍可被調(diào)用,而不會產(chǎn)生任何 IOException。
常用函數(shù)ByteArrayOutputStream() 創(chuàng)建一個新的 byte 數(shù)組輸出流。
ByteArrayOutputStream(int size) 創(chuàng)建一個新的 byte 數(shù)組輸出流,它具有指定大小的緩沖區(qū)容量(以字節(jié)為單位)。
實例int size() 返回緩沖區(qū)的當(dāng)前大小。
byte[] toByteArray() 創(chuàng)建一個新分配的 byte 數(shù)組。
String toString() 將緩沖區(qū)的字節(jié)轉(zhuǎn)換成字符串
void write(byte[] b, int off, int len) 將指定 byte 數(shù)組中從偏移量 off 開始的 len 個字節(jié)寫入此 byte 數(shù)組輸出流。
void write(int b) 將指定的字節(jié)寫入此 byte 數(shù)組輸出流。
public class demo8 { public static void main(String args[]) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); String str = "chenjiabing"; try { outputStream.write(str.getBytes()); //將字符串轉(zhuǎn)換成數(shù)組然后寫入緩沖區(qū) } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); //這里的關(guān)閉無效 } catch (IOException e) { e.printStackTrace(); } } //將緩沖區(qū)的數(shù)據(jù)轉(zhuǎn)換成字符串后輸出,這里同樣可以看出輸出流的關(guān)閉根本不影響函數(shù)的調(diào)用 System.out.println(outputStream.size()); //輸出緩沖區(qū)的大小 System.out.println(outputStream.toString()); //輸出chenjiabing outputStream.reset(); //清除緩沖區(qū)的內(nèi)容,如果不清零那么原先寫入的數(shù)據(jù)還是存在的,但是此時我們已經(jīng)不需要前面的數(shù)據(jù)了 try { outputStream.write("陳加兵".getBytes()); //繼續(xù)向緩沖區(qū)寫入數(shù)據(jù) } catch (IOException e) { e.printStackTrace(); } System.out.println(outputStream.size()); //這里的一個漢字占了三個字節(jié) System.out.println(outputStream.toString());//輸出陳加兵 } }綜合
下面我們結(jié)合上面的兩個類將字符串轉(zhuǎn)換大小寫
public class demo8 { public static void main(String args[]) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); String str = "chenjiabing"; ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes()); //實例化輸入流 int temp = 0; while ((temp = inputStream.read()) != -1) //讀取緩沖區(qū)的字節(jié)數(shù)據(jù) { char c = (char) temp; //將整數(shù)轉(zhuǎn)換成字符,ascii碼的轉(zhuǎn)換 outputStream.write(Character.toUpperCase(c)); //轉(zhuǎn)換成大寫,然后寫入輸出流的緩沖區(qū)中 } System.out.println(outputStream.toString()); //利用輸出流輸出轉(zhuǎn)換后的字符串,即是去取出內(nèi)存中的數(shù)據(jù) } }參考文章
http://blog.csdn.net/yyyandro...
http://www.cnblogs.com/lich/a...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67121.html
摘要:再附一部分架構(gòu)面試視頻講解本文已被開源項目學(xué)習(xí)筆記總結(jié)移動架構(gòu)視頻大廠面試真題項目實戰(zhàn)源碼收錄 Java反射(一)Java反射(二)Java反射(三)Java注解Java IO(一)Java IO(二)RandomAccessFileJava NIOJava異常詳解Java抽象類和接口的區(qū)別Java深拷貝和淺拷...
摘要:總結(jié)基于構(gòu)建相對來說還是比較便捷的,其中注解使得代碼更加簡潔,本次用到注解再匯總下,有時間的話可以深入理解下其背后的原理申明讓自動給程序進(jìn)行必要的配置。風(fēng)格的控制器提供路由信息,負(fù)責(zé)到中的具體函數(shù)的映射一般用于修飾層的組件自動導(dǎo)入依賴的 本文主要記錄搭建RESTful API標(biāo)準(zhǔn)工程,包含比較推薦的工程結(jié)構(gòu),掌握一些基本注解,并引入Swagger 新建一個項目 通過Spring Ini...
摘要:和方法用來設(shè)置線程是否成為守護(hù)線程和判斷線程是否是守護(hù)線程。守護(hù)線程依賴于創(chuàng)建它的線程,隨它的消亡而消亡。使用提供的方法,提醒線程終止,但是否真正終止由線程自己決定。參考實戰(zhàn)高并發(fā)程序設(shè)計多線程干貨系列一多線程基礎(chǔ) 一、如何創(chuàng)建多線程 1、繼承Thread類 public class MyThread extends Thread { @Override public ...
摘要:探索專為而設(shè)計的將探討進(jìn)行了何種改進(jìn),以及這些改進(jìn)背后的原因。關(guān)于最友好的文章進(jìn)階前言之前就寫過一篇關(guān)于最友好的文章反響很不錯,由于那篇文章的定位就是簡單友好,因此盡可能的摒棄復(fù)雜的概念,只抓住關(guān)鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個可以進(jìn)行周月切換的日歷,左右滑動的切換月份,上下滑動可以進(jìn)行周,月不同的視圖切換,可以進(jìn)行事件的標(biāo)記,以及節(jié)假日的顯示,功能豐富 Andr...
摘要:學(xué)習(xí)筆記二流的概念在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來的時候,就要使用輸出流完成。主要功能是向文件中寫入內(nèi)容構(gòu)造函數(shù)根據(jù)給定的對象構(gòu)造一個對象。 Java IO學(xué)習(xí)筆記二 流的概念 在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來...
閱讀 2272·2021-11-16 11:51
閱讀 3501·2021-09-26 10:14
閱讀 1789·2021-09-22 15:58
閱讀 1094·2019-08-30 15:52
閱讀 2012·2019-08-30 15:43
閱讀 2612·2019-08-30 13:46
閱讀 907·2019-08-30 13:10
閱讀 1020·2019-08-29 18:32