我需要對流進行各種解讀以進行解密過程。 (對於WinRT項目)首先,我想要做一個ReadByte()來獲取流的第一個字節。在此之後,我想將幾個字節讀入一個數組,然後將剩餘的字節讀入緩衝區。與.AsInputStream()轉換的流一起使用時出現C#DataReader問題
我打開了一個DataReader對傳遞的IInputStream對象。後者又是使用.AsInputStream()方法從System.IO.Stream對象創建的。當我在調試過程中查看DataReader對象時,發現UnconsumedBufferLength爲0,我無法執行ReadByte()或ReadBytes()以免我想獲得「該操作試圖訪問有效範圍之外的數據」例外。
爲什麼DataReader對象看起來是空的? AsInputStream()方法出現問題,之前沒有返回實際的IInputStream。我如何最終打開System.IO.Stream對象上的DataReader對象。其中的DataReader分配
代碼:
private Stream DecryptStream(IInputStream streamToDecrypt, byte[] key)
{
try
{
var dataReader = new DataReader(streamToDecrypt);
int ivLength = dataReader.ReadByte(); //Throws exception (UnconsumedBufferLength = 0 remember)
byte[] iv = new byte[ivLength];
dataReader.ReadBytes(iv); //Throws exception (UnconsumedBufferLength = 0 remember)
IBuffer toDecryptBuffer = new Windows.Storage.Streams.Buffer(dataReader.UnconsumedBufferLength);
toDecryptBuffer = dataReader.ReadBuffer(dataReader.UnconsumedBufferLength); //Works, but only because toDecryptBuffer is of length 0. which is still useless.
代碼調用上述方法:
Stream plainStream = DecryptStream(streamToDecrypt.AsInputStream(),key);
更新:代碼,其創建的流 這是第一次創建流,其中,從一個System.IO.Compression.ZipArchive對象。這隨後被傳遞到臨時解密功能可按爲「streamToDecrypt」
ZipArchiveEntry metaEntry = archive.Entries.Where(x => x.FullName == "myFullNameHere").FirstOrDefault();
Stream returnStream = metaEntry.Open();
你也可以說創造了第一個代碼「streamToDecrypt」?它是一個文件,httpstream等? – Jon
爲你增加了一個更新Jon。 –