勿以惡小而爲之,勿以善小而不爲--------------------------劉備
勸諸君,多行善事積福報,莫作惡
上一章簡單介紹了字符流Reader和Writer(三),如果沒有看過,請觀看上一章
以前我們都是將內容寫入到文件裏面,從文件裏面讀取內容,都是對具體的文件進行操作,所用的是FileOutputStream和FileInputStream.
其實,我們還可以將內容寫入到內存裏面,從內存裏面讀取相應的內容, 以內存爲中介,進行存儲和讀取。 但是,內存一斷電就沒有了,不能存儲,但是速度快。 內存,用的是 ByteArray, 所以對應的流就是 ByteArrayOutputStream 和ByteArrayInputStream.
一 ByteArrayOutputStream
一.一 方法
一.一.一 構造方法
一.一.一.一 方法
方法 | 作用 |
---|---|
ByteArrayOutputStream() | 創建內存輸出流,默認大小爲32 |
ByteArrayOutputStream(int size) | 創建內存輸出流,自定義緩衝區的大小 |
一.一.一.二 演示
@Test
public void conTest(){
//默認是32
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(32);
}
一.一.二 普通讀寫方法
方法 | 作用 |
---|---|
void close() | 關閉一個 ByteArrayOutputStream沒有任何效果。 |
void write(int b) | 將單個字節 寫入到內存中 |
void write(byte[] b, int off, int len) | 將字節數組寫入到內存裏面 |
writeTo(OutputStream out) | 將內存中的數組讀取出來,放置到輸出流裏面, 即往輸出流裏面輸入內存中的數據 |
byte[] toByteArray() | 將內存中的數據讀取出來,然後封裝成一個字節數組,返回該字節數組 |
String toString(String charsetName) | 將內存中的數據讀取出來,封裝成一個字符串,返回該字符串 |
一.二 演示內存輸出流
一.二.一 輸出到字節數組和字符串
@Test
public void writer1Test() throws Exception{
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(32);
//內存
byte[] b="你好啊,我是兩個蝴蝶飛".getBytes("utf-8");
//將內容寫入到內存裏面。
byteArrayOutputStream.write(b);
//讀出內容,封裝成字節數組,可用於圖片和視頻
byte[] bytes= byteArrayOutputStream.toByteArray();
System.out.println("字節輸出內容:"+new String(bytes,"UTF-8"));
//關閉是沒有效果的
byteArrayOutputStream.close();
//讀出內容,封裝成字符串
String content=byteArrayOutputStream.toString("UTF-8");
System.out.println("字符串輸出內容:"+content);
}
運行,控制檯打印輸出:
一.二.二 輸出到文件輸出流
Hello3.txt 目前的內容爲:
@Test
public void writer2Test() throws Exception{
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(32);
byte[] b="你好啊,我是兩個蝴蝶飛".getBytes("utf-8");
//寫入到內存裏面
byteArrayOutputStream.write(b);
//定義文件
File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"Hello3.txt");
//這個文件存在
OutputStream outputStream=new FileOutputStream(file,true);
//從內存裏面讀取內容,放置到輸出流
byteArrayOutputStream.writeTo(outputStream);
outputStream.close();
byteArrayOutputStream.close();
}
運行程序,查看 Hello3.txt 的內容
二. ByteArrayInputStream
二.一 方法
二.一.一 構造方法
二.一.一.一 方法
方法 | 作用 |
---|---|
ByteArrayInputStream(byte[] buf) | 將字節數組放置到內存裏面 |
ByteArrayInputStream(byte[] buf, int offset, int length) | 將字節數組的一部分放置到內存裏面 |
二.一.一.二 演示
@Test
public void conTest() throws Exception{
byte[] bytes="兩個蝴蝶飛".getBytes("UTF-8");
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(bytes);
//讀入一部分
ByteArrayInputStream byteArrayInputStream1=new ByteArrayInputStream(bytes,0,bytes.length);
}
二.一.二 讀取和關閉方法
方法 | 作用 |
---|---|
void close() | 關閉一個 ByteArrayInputStream沒有任何效果。 |
int read() | 從內存中讀一個 |
int read(byte[] b) | 從內存中讀取數據,放置到 b 字節數組裏面 |
int read(byte[] b, int off, int len) | 從內存中讀取 len個到字節數組 |
二.二 演示內存輸入流 ByteArrayInputStream
二.二.一 將字符串讀取到內存
@Test
public void readTest() throws Exception{
//定義輸入內存的數據源
byte[] bytes="你好啊,我是兩個蝴蝶飛".getBytes("UTF-8");
//寫入到內存裏面了。
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(bytes);
//寫進來了,接下來,該讀出來了。
//讀出來
byte[] b=new byte[1024];
int len=-1;
while((len=byteArrayInputStream.read(b))!=-1){
System.out.println("讀出數據:"+new String(b,0,len));
}
//關閉
byteArrayInputStream.close();
}
運行程序,控制檯打印輸出:
二.二.二 將輸入流中的內容讀取到內存裏面
@Test
public void read2Test() throws Exception{
File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
+File.separator+"Hello3.txt");
InputStream inputStream=new FileInputStream(file);
byte[] inputB=new byte[1024];
int len=-1;
ByteArrayInputStream byteArrayInputStream=null;
while((len=inputStream.read(inputB))!=-1){
//寫入到內存裏面了,一次讀取內容放置到 innputB 字節數組裏面了。
byteArrayInputStream=new ByteArrayInputStream(inputB,0,len);
//寫進來了,接下來,該讀出來了。
byte[] b=new byte[1024];
int lenTemp=-1;
while((lenTemp=byteArrayInputStream.read(b))!=-1){
System.out.println("讀出數據:"+new String(b,0,len));
}
}
//關閉
byteArrayInputStream.close();
inputStream.close();
}
運行程序,控制檯打印輸出:
謝謝您的觀看,如果喜歡,請關注我,再次感謝 !!!