Java的字符流和字節流 比較

IO分兩種流

字節流 InputStream OutputStream

字符流 Reader Writer

他們都是抽象類

具體實現
字節流 FileInputStream FileOutputStream
字符流 FileReader FileWriter 

       字符流處理的單元爲2個字節的Unicode字符,分別操作字符、字符數組或字符串,而字節流處理單元爲1個字節, 操作字節和字節數組。所以字符流是由Java虛擬機將字節轉化爲2個字節的Unicode字符爲單位的字符而成的,所以它對多國語言支持性比較好!如果是 音頻文件、圖片、歌曲,就用字節流好點,如果是關係到中文(文本)的,用字符流好點.
     所有文件的儲存是都是字節(byte)的儲存,在磁盤上保留的並不是文件的字符而是先把字符編碼成字節,再儲存這些字節到磁盤。在讀取文件(特別是文本文件)時,也是一個字節一個字節地讀取以形成字節序列.
      字節流可用於任何類型的對象,包括二進制對象,而字符流只能處理字符或者字符串; 2. 字節流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以。

 

字節流轉換成字符流可以用 InputSteamReader OutputStreamWriter

轉換成BufferdReader BufferedWriter 他們具有緩衝區

例如:讀取文件 從字節流輸入到字符流輸入
定義一個字節流:

FileInputStream fileInputStream = new FileInputStream("d:/text.txt");
// 定義一個指向D:/TEXT.TXT 的字節流 

InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); 
//字節流轉換成InputStreamReader 

BufferedReader bufferedReader = new BufferedReader(inputSteamReader); 
//InputStreamReader 轉換成帶緩存的bufferedReader

可以把讀出來的內容賦值給字符 
String ss = new String(); 
String s; 
while((s = bufferedReader.readLine())!=null){ 
        ss += s; 
} 


例如:寫入文件 從字節流輸出到字符流輸出

FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");

//定義一個指向D:/TEXT.TXT文件

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);

BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

bufferedWriter.write(s);

bufferedWriter.close();
outputStreamWriter.close();
fileOutputStream.close(); 
 




例程:
     將字符串轉化爲字節流 #region  將字符串轉化爲字節流
        
/**/ ///   <summary>
        
///  將字符串轉化爲字節流
        
///   </summary>
        
///   <param name="_Source"> 字串 </param>
        
///   <returns> 字節流 </returns>

         public   static   byte [] String2Bytes( string  strSource)
        
{
            System.IO.MemoryStream   memoryStream
= new    System.IO.MemoryStream();   
            System.IO.BinaryWriter   binaryWriter
= new    System.IO.BinaryWriter(memoryStream);   
            binaryWriter.Write( strSource );
            
byte []   buffer = memoryStream.GetBuffer();
            
return  buffer;    
        }

        
#endregion


        
        
將字節流轉化爲字符串 #region  將字節流轉化爲字符串
        
/**/ ///   <summary>
        
///  將字節流轉化爲字符串
        
///   </summary>
        
///   <param name="bytData"> 字節流 </param>
        
///   <returns> 字串 </returns>

         public   static   string  Bytes2String( byte [] bytData)
        
{
            
// 字節流->字符串   
            System.IO.MemoryStream   memoryStream2  =   new    System.IO.MemoryStream(bytData);   
            System.IO.BinaryReader   binaryReader 
=   new    System.IO.BinaryReader(memoryStream2);   
            
string    s2 = binaryReader.ReadString();   
            
return  s2;
        }

        
#endregion

 

發佈了36 篇原創文章 · 獲贊 0 · 訪問量 1446
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章