內存流概念
在之前所有的操作都是針對於文件進行的IO處理。除了文件之外,IO的操作也可以發生在內存之中,這種流稱之爲內存操作流。文件流的操作裏面一定會產生一個文件數據(不管最後這個文件數據是否被保留)。
如果現在需求是:需要進行IO處理,但是又不希望產生文件。這種情況下就可以使用內存作爲操作終端。
對於內存流也分爲兩類:
- 字節內存流:ByteArrayInputStream、ByteArrayOutputStream
- 字符內存流:CharArrayReader、CharArrayWriter
首先來觀察ByteArrayInputStream和ByteArrayOutputStream的構造方法:
public ByteArrayInputStream(byte buf[])
public ByteArrayOutputStream()
接下來看內存流的繼承關係:
範例:通過內存流實現大小寫轉換。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TestDemo {
public static void main(String[] args) throws IOException {
String msg = "hello world";
// 實例化InputStream類對象,實例化的時候需要將你操作的數據保存到內存之中
// 最終讀取的就是你設置的內容。
InputStream input = new ByteArrayInputStream(msg.getBytes()) ;
OutputStream output = new ByteArrayOutputStream() ;
int temp = 0 ;
while((temp = input.read()) != -1) {
// 每個字節進處理,處理之後所有數據都在outputStream類中
output.write(Character.toUpperCase(temp)) ;
}
// 直接輸出output對象
System.out.println(output) ;
input.close() ;
output.close() ;
}
}
這個時候發生了IO操作,但是沒有文件產生,可以理解爲一個臨時文件處理。
最初Ajax剛形成的時候此類操作非常多。後來出現了許多新的工具,這類代碼出現的機率就比較低了。