ฉันสงสัยว่าเหตุใดตัวอย่างมากมายจึงอ่านอาร์เรย์ไบต์เป็นสตรีมใน chucks และไม่ใช่ทั้งหมดในคราวเดียว ... ฉันรู้ว่านี่เป็นคำถามที่นุ่มนวล แต่ฉันสนใจ
ฉันเข้าใจเล็กน้อยเกี่ยวกับฮาร์ดแวร์และการเติมบัฟเฟอร์อาจขึ้นอยู่กับขนาดมากและคุณคงไม่อยากเขียนลงในบัฟเฟอร์อีกจนกว่าจะถูกล้างไปยังทุกที่ที่ต้องไป ฯลฯ ... แต่ด้วยแพลตฟอร์ม .Net (และอื่น ๆ ภาษาสมัยใหม่) ฉันเห็นตัวอย่างของทั้งสองอย่าง ดังนั้นเมื่อใช้ which และเมื่อใด หรือวินาทีนั้นเป็น no อย่างแน่นอน?
นี่คือสิ่ง (รหัส) ฉันหมายถึง:
var buffer = new byte[4096];
while (true)
{
var read = this.InputStream.Read(buffer, 0, buffer.Length);
if (read == 0)
break;
OutputStream.Write(buffer, 0, read);
}
ค่อนข้างมากกว่า:
var buffer = new byte[InputStream.Length];
var read = this.InputStream.Read(buffer, 0, buffer.Length);
OutputStream.Write(buffer, 0, read);
ฉันเชื่อว่าทั้งสองถูกกฎหมาย? เหตุใดจึงต้องวุ่นวายกับ while loop (ในสิ่งที่คุณตัดสินใจจัดโครงสร้างมัน)?
ฉันกำลังเล่นเป็นผู้สนับสนุนปีศาจที่นี่ เพราะฉันอยากเรียนรู้ให้มากที่สุดเท่าที่จะทำได้ :)