2014-10-03 152 views
0

我有多家大base64編碼的文本文件,我需要知道在C#.NET解碼的base64大文本字符串

如何解讀這些大型字符串轉換爲字符串?

我用這個代碼,但它需要很長的時間,有時它得到了凍結,停止響應

richTextBox2.Text = Base64Decode(richTextBox1.Text); // I Past text at richTextBox1 

,我嘗試這也

var bytes = Convert.FromBase64String(richTextBox1.Text); 
var text = System.Text.Encoding.Unicode.GetString(bytes, 0, bytes.Length); 
richTextBox2.Text = text.ToString(); 

有很多類似的問題,但我覺得沒有一個講大的文本文件

編輯:

public static string Base64Decode(string base64EncodedData) 
    { 
     var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); 
     return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); 
    } 
+0

你試過解碼它的異步? – 2014-10-03 07:55:25

+0

多大,多長? – 2014-10-03 07:56:50

+0

我不這麼認爲。你能解釋一下嗎? – user3570328 2014-10-03 07:57:51

回答

2

base-64中的每個完整的4個字節表示原始有效負載的正好3個字節,並帶有零填充。因此,如果問題一次做完所有事情,只需考慮4的倍數(例如,4,或4 * 1024),然後分批處理數據(否則剩餘的數量很大)。

但是,1MB是而不是的大數據量;我不希望這是問題。從以下方面:

var data = new byte[10000000]; 
    var watch = Stopwatch.StartNew(); 
    string s = Convert.ToBase64String(data); 
    watch.Stop(); 
    Console.WriteLine(watch.ElapsedMilliseconds); 
    watch.Reset(); 
    watch.Start(); 
    byte[] b = Convert.FromBase64String(s); 
    watch.Stop(); 
    Console.WriteLine(watch.ElapsedMilliseconds); 

我得到30毫秒到基座-64編碼10,000,000字節,並且50ms的立足-64解碼字符串(長度:13333336個字符)。

+0

謝謝,但我希望這(Windows窗體應用程序) - 我怎樣才能使它工作? – user3570328 2014-10-03 17:22:09

+0

@ base-64和binary之間的轉換用戶無論身處何處都是如此。您看到的延遲:不是由於轉換 – 2014-10-03 17:31:23

+0

感謝您的幫助 – user3570328 2014-10-06 03:15:18

-3

使用BackgroundWorker來完成這項工作。

+0

使用包裝在Component類中的後臺線程不會使單個BCL調用變得更快,也不會提供任何優於在Tas內部簡單地調用,之後使用'async/await'來更新UI。 – 2014-10-03 08:19:12

+0

此外,如果RichTextBox控件延遲加載1MB文本,它將無法解決問題。這將始終發生在UI線程 – 2014-10-03 08:24:02

+0

好吧,他可以在字符串中傳輸RichTextBox的內容,然後將此字符串作爲參數發送給BackgroundWorker。我明白,延遲是由base64解碼造成的,而不是具有豐富控制權的I/O。 – i486 2014-10-03 21:07:18