ฉันจะแปลง struct System.Byte byte[]เป็นSystem.IO.StreamวัตถุในC # ได้อย่างไร
ฉันจะแปลง struct System.Byte byte[]เป็นSystem.IO.StreamวัตถุในC # ได้อย่างไร
คำตอบ:
วิธีที่ง่ายที่สุดในการแปลงอาร์เรย์ไบต์เป็นสตรีมใช้MemoryStreamคลาส:
Stream stream = new MemoryStream(byteArray);
stream.ToArray()หากคุณต้องการอาร์เรย์ไบต์กลับมา
คุณกำลังมองหาวิธีการMemoryStream.Write
ตัวอย่างเช่นรหัสต่อไปนี้จะเขียนเนื้อหาของbyte[]อาร์เรย์ลงในสตรีมหน่วยความจำ:
byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream();
stream.Write(myByteArray, 0, myByteArray.Length);
อีกวิธีหนึ่งคุณสามารถสร้างวัตถุใหม่ที่ไม่สามารถปรับขนาดได้MemoryStreamตามอาร์เรย์ไบต์:
byte[] myByteArray = new byte[10];
MemoryStream stream = new MemoryStream(myByteArray);
MemoryStream.Writeคือการใช้หน่วยความจำมากขึ้นแล้วnew MemoryStream(myByteArray)
MemoryStreamบัฟเฟอร์ตามค่าเริ่มต้น (เช่นเดียวกับเช่นรายการ) สิ่งนี้สามารถจัดการได้อย่างง่ายดายโดยใช้การโอเวอร์โหลดที่ช่วยให้คุณสามารถกำหนดความจุได้ แต่จะมีประโยชน์จริง ๆ ถ้าคุณไม่คาดว่าจะเขียนข้อมูลใด ๆ ไปยังสตรีม (หรือถ้าคุณรู้ว่าคุณต้องการไบต์พิเศษจำนวนเท่าใด ) แต่ฉันสงสัยว่า jitbit อาจหมายถึงความจริงที่ว่าเมื่อคุณใช้ตัวbyte[]สร้างอาร์เรย์จะไม่ถูกคัดลอก - MemoryStreamหมายถึงอาร์เรย์ในอาร์กิวเมนต์ นี้สามารถเป็นได้ทั้งดีและไม่ดีและมันเป็นบิตของความอัปยศมันไม่ได้รับการบันทึกไว้ใน MSDN :)
วิธีการทั่วไปในการเขียนไปยังสตรีมใด ๆ (ไม่เพียง แต่MemoryStream) คือการใช้BinaryWriter:
static void Write(Stream s, Byte[] bytes)
{
using (var writer = new BinaryWriter(s))
{
writer.Write(bytes);
}
}
มองเข้าไปในMemoryStreamชั้นเรียน