內存流的作用:假設某一種應用需要進行IO操作,但又不希望在磁盤上產生一些文件時,就可以將內存作爲一個臨時文件進行操作。
字節內存流:ByteArrayInputStream、ByteArrayOutputStream;
字符內存流:CharArrayReader、CharArrayWriter。
字節內存流與字符內存流的區別:兩者的唯一的區別就在於操作數據類型上。(Byte、Char)
實現一個小寫字母轉大寫字母的操作:
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
String str ="Hello*Word!!!";
//通過內存流實現轉換。先將數據保存在內存中,然後從裏面取出每一個數據
//將所有要讀取的數據設置到內存輸入流之中,本次利用向上轉型爲InputStream實例化
InputStream input = new ByteArrayInputStream(str.getBytes());
//將所有內存數據取出
OutputStream output = new ByteArrayOutputStream();
int temp = 0;
//經過此次循環,所有的數據都將保持在內存輸出流對象之中
while((temp = input.read()) !=-1){ //每次讀取一個數據
output.write(Character.toUpperCase(temp)); //字節輸出流
}
System.out.println(output);
input.close();
output.close();
}
}
以程序操作爲例:
|-輸出 :程序>>>OutputStream<<<文件
|-輸入 :程序>>>lnputStream<<<文件
以內存操作爲例:
|-輸出:程序>>>lnputStream>>>內存
|-輸入:程序<<<OutputStream<<<內存
通過內存流實現文件的合併讀取:
import java.io.*;
public class Test2 {
public static void main(String args[]) throws Exception{
File fileA = new File("D:" +File.separator + "AAA.txt");
File fileB = new File("D:" +File.separator + "BBB.txt");
InputStream inputA = new FileInputStream(fileA); //字節輸入流
InputStream inputB = new FileInputStream(fileB); //字節輸入流
ByteArrayOutputStream output = new ByteArrayOutputStream(); //內存輸出流
int temp = 0 ;
while((temp=inputA.read()) != -1){
output.write(temp); //循環讀取數據,並將數據保存到輸出流
}
while( (temp = inputB.read()) != -1){
output.write(temp);
}
byte data[] = output.toByteArray(); //取出全部數據
output.close();
inputA.close();
inputB.close();
System.out.println(new String(data));
}
}