掌握內存操作流
輸入和輸出都是從文件中來的,當然,也可將輸出的位置設置在內存上,這就需要ByteArrayInputStream和ByteArrayOutputStream
ByteArrayInputStream:將內容寫入到內存中,
ByteArrayOutputStream:將內存中數據輸出
此時的操作應該以內存為操作點。
利用此類 完成一些功能。
常用方法
ByteArrayInputStream :是InputStream子類。
public class ByteArrayInputStream extends InputStream
構造方法:
ByteArrayInputStream(byte[] buf) 創建一個 ByteArrayInputStream,使用 buf 作為其緩沖區數組。
接收一個byte數組,實際上內存的輸入就是在構造方法上將數據傳遞到內存之中。
ByteArrayOutputStream:是OutputStream子類
輸出就是從內存中寫出數據。
public class ByteArrayOutputStream extends OutputStream
構造方法:
ByteArrayOutputStream() 創建一個新的 byte 數組輸出流。
主要方法:
void write(int b) 將指定的字節寫入此 byte 數組輸出流。
利用他們,完成一個大小寫字母轉換順序的程序。
重溫一下這個方法:getBytes();定義如下:返回的是一個byte類型的數組。
public byte[] getBytes() {
return StringCoding.encode(value, 0, value.length); }
1,
int size() 返回緩沖區的當前大小
2,
byte[] toByteArray() 創建一個新分配的 byte 數組。
3,
String toString() 使用平台默認的字符集,通過解碼字節將緩沖區內容轉換為字符串。
利用他們,完成一個大小寫字母轉換順序的程序。
String類的大小寫轉換方法:
String toLowerCase()
使用默認語言環境的規則將此 String 中的所有字符都轉換為小寫。
轉大寫:
String toUpperCase()
使用默認語言環境的規則將此 String 中的所有字符都轉換為大寫。
如果要想把一個大寫邊小寫,則可以通過包裝類,字符的包裝類是Character。
static char toLowerCase(char ch) 使用取自 UnicodeData 文件的大小寫映射信息將字符參數轉換為小寫。
代碼實例:
注意,跟文件讀取不一樣,不要設置文件路徑。
package 類集; import java.io.* ; public class ByteArrayDemo01{ public static void main(String args[]){ String str = "HELLOWORLD" ; // 定義一個字符串,全部由大寫字母組成 ByteArrayInputStream bis = null ; // 內存輸入流 ByteArrayOutputStream bos = null ; // 內存輸出流 bis = new ByteArrayInputStream(str.getBytes()) ; // 向內存中輸出內容,注意,沒有跟文件讀取一樣,設置文件路徑。 bos = new ByteArrayOutputStream() ; // 准備從內存ByteArrayInputStream中讀取內容,注意,跟文件讀取不一樣,不要設置文件路徑。
int temp = 0 ;
while((temp=bis.read())!=-1)
{
char c = (char) temp ; // 讀取的數字變為字符
bos.write(Character.toLowerCase(c)) ; // 將字符變為小寫
} // 所有的數據就全部都在ByteArrayOutputStream中
String newStr = bos.toString() ; // 因為所有output的數據都在ByteArrayOutputStream實例對象中,所以可以取出內容,將緩沖區內容轉換為字符串。
try{
bis.close() ;
bos.close() ;
}catch(IOException e){
e.printStackTrace() ;
} System.out.println(newStr) ;
}
};
實際上以上操作很好體現了對象的多態。通過實例化其子類不同,完成的功能也不同,也就相當於輸出的位置不同,
如果是輸出文件,則使用FileXxxx類。如果是內存,則使用ByteArrayXxx。
總結:
1,內存操作流的操作對象,一定是以內存為主准,不要以程序為准。
2,實際上此時可以通過向上轉型的關系,為OutputStream或InputStream.
3,內存輸出流在日后的開發中也是經常使用到,所以一定要重點掌握。