小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

筆記9:vb.net的字符數(shù)據(jù)流TextReader、TextWriter

 百眼通 2014-10-31

        在學(xué)習(xí)字符數(shù)據(jù)流之前,看一個例子,在定義時不同的構(gòu)造構(gòu)造方法會出現(xiàn)不同的結(jié)果:

  1. Imports System.IO  
  2. Imports System.Text  
  3. Public Class Form1  
  4.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  5.         Dim sr As New StreamReader("D:\11.txt")  
  6.         'Dim sr As New StreamReader("D:\11.txt", Encoding.Default)  
  7.         TextBox1.Text = sr.ReadToEnd  
  8.         sr.Close()  
  9.     End Sub  
  10. End Class  
                     
                  原因是編碼的不同,最后顯示的漢字有可能是亂碼。這提醒我們在漢字的I/O時要注意編碼。

.






                正題 :字符數(shù)據(jù)流的結(jié)構(gòu):

              

              TextReader與TextWriter類是抽象類,其基本方法與Stream類相似。

               它們的主要區(qū)別在于:TextReader與TextWriter通過特定字符集編碼方式轉(zhuǎn)換成字節(jié)數(shù)據(jù),完成字符數(shù)據(jù)的存取。



一、TextReader與TextWriter類

         讀寫文本數(shù)據(jù)的基類是TextReader與TextWriter類。

         這兩個抽象類定義了從數(shù)據(jù)流或文本字符串中讀寫的基本功能,如Read、Peek等,與Stream類類似,差異是讀取的是

                      字符串,而不是字節(jié)。

          

         TextReader的方法有:Read、ReadLine、ReadToEnd

          TextWriter的方法有:Writer、WriterLine

          比如:

  1. '===========TextReader=========================  
  2. '讀取文本讀取器中的下一個字符并使該字符的位置提升一個字符  
  3. Public Overridable Function Read() As Integer  
  4.   
  5.     '從當(dāng)前讀取器中讀取指定數(shù)目的字符并從指定索引開始將該數(shù)據(jù)寫入緩沖區(qū)  
  6. Public Overridable Function Read(<OutAttribute> buffer As Char(), index As Integer, count As Integer) As Integer  
  7.   
  8.     '從文本讀取器中讀取一行字符并將數(shù)據(jù)作為字符串返回  
  9. Public Overridable Function ReadLine() As String  
  10.   
  11.     '讀取從當(dāng)前位置到文本讀取器末尾的所有字符并將它們作為一個字符串返回  
  12. Public Overridable Function ReadToEnd() As String  
  13.   
  14.   
  15.     '======TextWriter============================  
  16.     '將字符寫入該文本字符串或流。  
  17. Public Overridable Sub Write(value As Char)  
  18. Public Overridable Sub Write(buffer As Char())  
  19. Public Overridable Sub Write(value As Integer)  
  20.   
  21.     '將行結(jié)束符的字符串寫入文本字符串或流  
  22. Public Overridable Sub WriteLine()  
  23. Public Overridable Sub WriteLine(value As Char)  
  24.   
  25.   
  26.     '將后跟行結(jié)束符的字符子數(shù)組寫入文本字符串或流  
  27. Public Overridable Sub WriteLine(buffer As Char(), index As Integer, count As Integer)  



二、創(chuàng)建StreamReader對象

       TextReader派生出StreamReader類,StreamReader從派生于Stream類的子類中讀取數(shù)據(jù)。


        StreamReader構(gòu)造有根據(jù)基礎(chǔ)流Stream來構(gòu)造、根據(jù)文件名來構(gòu)造:

  1. '為指定的流初始化 StreamReader 類的新實例  
  2. Public Sub New(stream As Stream)  
  3.   
  4.     '為指定的文件名初始化 StreamReader 類的新實例。  
  5. Public Sub New(path As String)  
  6.   
  7.   
  8.   
  9.   
  10.     '帶編碼方式的上面兩類  
  11. Public Sub New(stream As Stream, encoding As Encoding)  
  12. Public Sub New(path As String, encoding As Encoding)  
         注意:StreamReader本身不能取得流的長度,只能由基類的流來取得(微軟翻譯為基礎(chǔ)流):

                                 StreamReader.BaseStream.Length

                     對于漢字情況,請選擇Encoding.Default試試



三、StreamReader屬性

                BaseStream      返回基礎(chǔ)流。
        CurrentEncoding      獲取當(dāng)前 StreamReader 對象正在使用的當(dāng)前字符編碼。
        EndOfStream         獲取一個值,該值表示當(dāng)前的流位置是否在流的末尾。(True/False)




四、StreamReader常用方法

          讀取文本文件中最常見的是:    ReadLine、ReadToEnd、Peek、Read。

  1. '返回下一個可用的字符,但不移動流位置(常用于探測下一字符或是否結(jié)束)  
  2. Public Overrides Function Peek As Integer   
  3.   
  4.   
  5. '讀取輸入流中的下一個字符并使該字符的位置提升一個字符。  
  6. Public Overrides Function Read As Integer  
  7.   
  8. '從當(dāng)前流中將指定的最多個字符讀到指定索引位置開始的緩沖區(qū)  
  9. Public Overrides Function Read (buffer As Char(),index As Integer, count As Integer ) As Integer  
  10.   
  11.   
  12. Public Overrides Function ReadLine As String  
  13. Public Overrides Function ReadToEnd As String  



五、StreamWriter類

        StreamWriter與StreamReader對應(yīng)。創(chuàng)建對象時一樣:由流或文件名來創(chuàng)建


        1、構(gòu)造:

          StreamWriter(Stream)
                                                 用 UTF-8 編碼及默認緩沖區(qū)大小,為指定的流初始化 StreamWriter 類的一個新實例。


          StreamWriter(String)
                                                用默認編碼和緩沖區(qū)大小,為指定的文件初始化 StreamWriter 類的一個新實例。


          StreamWriter(Stream, Encoding)
                                                用指定的編碼及默認緩沖區(qū)大小,為指定的流初始化 StreamWriter 類的新實例。


           StreamWriter(String, Boolean)
                                                用默認編碼和緩沖區(qū)大小,為指定的文件初始化 StreamWriter 類的一個新實例。 如果該文件存在,

                                                 則可以將其覆蓋或向其追加。 如果該文件不存在,則此構(gòu)造函數(shù)將創(chuàng)建一個新文件。




          2、寫入方法

                主要有兩個:Write、 WriterLine

                 還有一個隱形的Flush,清理當(dāng)前編寫器的所有緩沖區(qū),并使所有緩沖數(shù)據(jù)寫入基礎(chǔ)流。

                 具體如:

                 Public Sub  Writer(ByVal  buffer()  as Char)

                 Public Sub  Writer(byVal   buffer() as Char,ByVal  index As Integer,Byval count  As Integer)

                 Public Sub  Writer(ByVal   value As String)

             



六、StringReader與StringWriter

        它是以字符串為數(shù)據(jù)源,前面的是以Stream為數(shù)據(jù)源。


        所以構(gòu)造方法是以字串:

                Public  Sub  New(ByVal  s As String)

                Public  Sub  New (ByVal  sb as StringBuilder)



        同前面的StreamReader、StreamWriter一樣,


        StringReader的方法有:Peek、Read、ReadLine、ReadToEnd


        StringWriter的方法有:Writer、WriterLine

                    唯一不同的,取是基礎(chǔ)流的是用:GeStringBuilder   它返回數(shù)據(jù)源(前面是用BaseStream)

                     


以一個例子結(jié)束吧:

  1. Imports System.IO  
  2. Public Class Form1  
  3.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  4.         Dim sr As New StreamReader("D:\11.txt")  
  5.         Dim e1() As String  
  6.         Dim e2() As String  
  7.   
  8.         Do Until sr.EndOfStream  
  9.             If sr.ReadLine = "EA" Then Exit Do  
  10.         Loop  
  11.   
  12.         e1 = Split(sr.ReadLine)  
  13.         e2 = Split(sr.ReadLine)  
  14.   
  15.         For i As Int32 = 0 To UBound(e2)  
  16.             ListBox1.Items.Add(CInt(e2(i)))  
  17.         Next  
  18.   
  19.         sr.Close()  
  20.     End Sub  
  21. End Class  


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多