2015-07-01 74 views
1

是否有任何流讀取器類只讀數charstringbytebyte[]流讀取器。讀取字符數

forexample讀取字符串:

string chunk = streamReader.ReadChars(5); // Read next 5 chars 

或讀取的字節

byte[] bytes = streamReader.ReadBytes(5); // Read next 5 bytes 

需要注意的是這個類的方法或名稱的返回類型並不重要。我只是想知道是否有類似的東西,然後我可以使用它。

我從012i文件有byte[]。我想用C#閱讀這個midi文件。但我需要讀取字節數的能力。或字符(如果我把它轉換爲十六進制)。驗證midi並更容易從中讀取數據。

+1

可以使用[StreamReader.Read](https://msdn.microsoft.com/en-us/library/9kstw824(V = vs.110)的.aspx) - 「讀取指定最大字符數的從當前流到緩衝區,從指定的索引開始。「 – stuartd

+1

您可能正在尋找'BinaryReader'。從'TextReader'派生的類一般都是面向文本的......注意,它們都需要'Stream'作爲源 - 這就是'MemoryStream'的用途。 –

+0

@AlexeiLevenkov謝謝。你的評論實際上是一個答案。我需要的是MemoryStream。 –

回答

1

感謝您的意見。我不知道有一個重載讀取方法。我可以通過FileStream實現這一點。

 using (FileStream fileStream = new FileStream(path, FileMode.Open)) 
     { 
      byte[] chunk = new byte[4]; 
      fileStream.Read(chunk, 0, 4); 
      string hexLetters = BitConverter.ToString(chunk); // 4 Hex Letters that i need! 
     } 
+1

你甚至不需要將FileStream轉換爲字節和MemoryStream ... –

+0

謝謝!文件流做直的工作! @AlexeiLevenkov –

0

你可以通過做下面的事情來實現這一點,但我不確定這會適用於你的問題。

StreamReader sr = new StreamReader(stream); 
StringBuilder S = new StringBuilder(); 
while(true) 
{ 
S = S.Append(sr.ReadLine()); 
if (sr.EndOfStream == true) 
     { 
     break; 
     } 
} 

一旦你對「S」有價值,你可以考慮它的子字符串。