ile başlamak için önemsiz olur Burada neyi yanlış yaptığımı anlamaya çalışıyorum. Bir dilde ilk dört baytı bir veri akışından, verilerin kalanının ne kadar beklendiğini söyleyen bir Int32 değerine getirmeyi kolaylaştırmak için bir Binary Reader kullanmaya çalışıyorum.C# BinaryReader.Read()
static void Main(string[] args)
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
string s = "Imagine this is a very very long string.";
writer.Write(s.Length);
writer.Write(s);
writer.Flush();
BinaryReader reader = new BinaryReader(stream);
reader.BaseStream.Seek(0, SeekOrigin.Begin);
char[] aChars = new char[reader.ReadInt32()];
reader.Read(aChars, 0, aChars.Length);
Console.WriteLine(new string(aChars));
}
çıkış giriş olmalı, ama ben bu
olduğunu düşünün (dizeye dizesinden ilk karakter değişiklikleri unutmayın) olsun(bu çok çok uzun bir dize
Birisi bana neyi yanlış yaptığımı açıklayabilir İdeal olarak, ikinci okuma, toplam okunan baytlar ilk dört bayt değerine eşit olana kadar devam edecektir. Bu kod, karşılaştığım problemi göstermek için sadece bir sadeleştirmedir. Akışın pozisyonu düzeltildi ekt (4) ancak neredeyse 2'de okumaya başlamış gibi gözüküyor.
MSDN, okumak istersiniz. – jason
Hehe, teşekkürler ... ve öyleydim. Ne yazık ki, BinaryReader, Writer’in string’ten daha fazla veri depoladığını belirtmez;) – James
'BinaryWriter.Write (string)': "Uzunluk-öneklenmiş' string', 'string' uzunluğunu önceleyerek' string' uzunluğunu temsil eder. dize, bu dizgenin uzunluğunu içeren tek bir bayt veya kelime. Bu yöntem, ilk olarak "string" in uzunluğunu UTF-7 kodlu imzasız bir tamsayı olarak yazar ve daha sonra bu karakterleri kullanarak akışa birçok karakter yazar. BinaryWriter'ın geçerli kodlaması. " – jason