none
請問如何將Stream 轉成String更好的方法? RRS feed

  • 問題

  • 各位大大們晚安:

    我想請教一個問...

    小弟遇到一個小小問題,就是將Stream轉成String....

    起先小弟以為只要將Stream的數數名稱後面加.tostring()即可變成字串

    答案是不行...

    我看了一下msdn發現他們有用這個方法轉換,就是利用一個Char[]來暫存然後在放到string中,code大致如下

     Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
            StreamReader readStream = new StreamReader(streamResponse, encode);
            Char[] read = new Char[32768];
            int count = readStream.Read(read, 0, 32768);
            while (count > 0)
            {
                // Dump the 256 characters on a string and display the string onto the console.
                String str = new String(read, 0, count);
                MessageBox.Show(str);
                count = readStream.Read(read, 0, 32768);
            }

     

    但小弟想請教一下,是否有更好的方法,就是不用透過Char[] 即可直接轉成string的方法,謝謝...


     

    2007年4月17日 下午 05:01

解答

所有回覆

  • 可以用StreamReader.ReadToEnd,

    如果確定是UTF-8的話, 就會更簡潔

    http://msdn2.microsoft.com/en-us/library/system.io.streamreader.readtoend.aspx

    2007年4月17日 下午 07:39
  • 我自己包起來的是用 BinaryReader.ReadString 來讀...
    2007年4月18日 上午 01:28
  • 其實string就是一堆char的集合,如果你把一個string資料,用[]去抓取其中一個位置的值,他就是char型別了

    你這個SAMPLE其實OK啦 因為他還兼顧到字碼轉換,當然你如果沒有這方面的考量,其他幾位大大的方法是沒有問題的

    2007年4月18日 上午 03:08
  • 如果要考慮字碼轉換,我不建議用 Char ,一方面是效能,一方面是麻煩。

     

    用 Stream.ToArray 轉成 Byte[] 後,用 Encoding.GetString(Byte[])

     

    兩步驟就都可以解決了。

     

    也就是說,整個 Stream 轉字串,用這個方法比較好,Stream 部份內容轉字串,比如說二進位檔,用 ReadString 比較好。

     

    我自己常用的 VBNET 字串功能整理在:http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Module&Module=6

     

    這篇說的內容我就是弄成一個函數:

    BytesToString(Byte(), Optional Encoding)

    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=6&Function=55

    2007年4月18日 上午 03:24
  • 經驗分享:

    StreamReader.ReadToEnd()如果檔案超過100M的話,你可以去泡杯咖啡回來等,因為會很久

    一般如果作一些文字檔案分析的工作,我們會開比方說1M的 Char陣列,一段一段讀進來,重複用那個陣列,效能才會好

    所以簡潔的程式碼固然好,不過還是要注意效能的問題 ^^

    2007年4月19日 上午 01:13
  • 處理大型檔案,本來邏輯就應該調整,自建緩衝區,這也是沒辦法的。

     

    就像 Image 也沒辦法處理 衛星照片 或 空照圖 ,即使不是特殊格式,是用 jpg 的也一樣,一般這種照片都是用抽點來顯示的,因為照片檔實在太大了~ 早期 DVD 沒有普及時,買回來的檔案燒成一張 CDR ,一個 jpg 5xx mb ,一般軟體根本不能開,除了特別針對這類的軟體外,一般軟體都是直接開檔。

     

    回過頭來說,筆記本也是直接開檔的,也不據處理大型檔案的能力,也是相同的,因為設計時,就不是針對大型檔案來設計。

    2007年4月19日 上午 01:37