JAVA的IO操作:內存操作流


掌握內存操作流

輸入和輸出都是從文件中來的,當然,也可將輸出的位置設置在內存上,這就需要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,內存輸出流在日后的開發中也是經常使用到,所以一定要重點掌握。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM