2015-07-01 1 views
1

Есть ли класс чтения Считывателя только для чтения от char от string Или byte от byte[]?Считыватель Stream.Read number of character

Forexample чтение строки:

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

или чтение байтов

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

Обратите внимание, что тип возвращаемого значения этого метода или имя класса не имеет значения. Я просто хочу знать, есть ли что-то похожее на это, тогда я могу его использовать.

У меня byte[] из midi File. Я хочу прочитать этот midi-файл в C#. Но мне нужно читать число байтов. или символы (если я преобразую его в шестнадцатеричный). Чтобы проверить 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

Спасибо! filestream сделал прямую работу! @AlexeiLevenkov –

0

Вы можете достичь этого, выполнив что-то вроде ниже, но я не уверен, что это применимо к вашей проблеме или нет.

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

Как только у вас есть значение на «S», вы можете рассмотреть его.