FileStream เทียบกับ / ความแตกต่าง StreamWriter?


85

คำถาม:

อะไรคือความแตกต่างระหว่างFileStreamและStreamWriterใน. Net ?

คุณควรใช้บริบทใด ข้อดีและข้อเสียของพวกเขาคืออะไร?

เป็นไปได้หรือไม่ที่จะรวมสองสิ่งนี้เข้าด้วยกัน

คำตอบ:


98

FileStream และ StreamWriter ใน dotnet ต่างกันอย่างไร

เป็นFileStream Streamเช่นเดียวกับสตรีมทั้งหมดที่เกี่ยวข้องกับbyte[]ข้อมูลเท่านั้น

A StreamWriter : TextWriterเป็นมัณฑนากรสตรีม TextWriter เข้ารหัสข้อมูลของข้อความเช่นสตริงหรือถ่านไปแล้วเขียนมันไปเชื่อมโยงbyte[]Stream

คุณควรใช้บริบทใด ข้อดีและข้อเสียของพวกเขาคืออะไร?

คุณใช้ FileStream เปล่าเมื่อคุณมีbyte[]ข้อมูล คุณเพิ่มStreamWriterเมื่อคุณต้องการเขียนข้อความ ใช้ Formatter หรือ Serializer เพื่อเขียนข้อมูลที่ซับซ้อนมากขึ้น

เป็นไปได้หรือไม่ที่จะรวมสองสิ่งนี้เข้าด้วยกัน

ใช่. คุณต้องมี Stream เสมอเพื่อสร้าง StreamWriter วิธีการช่วยเหลือSystem.IO.File.CreateText("path")จะสร้างมันขึ้นมารวมกันจากนั้นคุณจะต้อง Dispose () ตัวเขียนด้านนอกเท่านั้น


4
สิ่งสำคัญที่ควรทราบFileStreamคือสตรีมประเภทหนึ่งซึ่งปรับแต่งให้เหมาะกับไฟล์โดยเฉพาะ สตรีมทำงานกับไบต์โดยกำเนิดอย่างไรก็ตามStreamWriter/ Reader จะเขียน / อ่านข้อความในสตรีมใด ๆไม่ใช่แค่FileStreams ตัวอย่างเช่นMemoryStreams, NetworkStreamsฯลฯ ..
iliketocode

19

FileStream เขียนไบต์ StreamWriter เขียนข้อความ นั่นคือทั้งหมด


14
อันที่จริงนั่นไม่ใช่ "ทั้งหมด" ... แต่เป็นความแตกต่างที่ถูกต้องอย่างหนึ่ง
David

14

FileStream มีไว้สำหรับไฟล์ที่ใช้งานได้อย่างชัดเจน

StreamWriter สามารถใช้เพื่อสตรีมไปยังStreamประเภทใดก็ได้เช่นซ็อกเก็ตเครือข่ายไฟล์และอื่น ๆ

ScottGu อธิบายถึงวัตถุสตรีมต่างๆได้ดีที่นี่: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223


1
การอ้างอิงที่ดีเยี่ยมสำหรับสตรีมแม้ว่าจะไม่ครอบคลุมสตรีม R / W ที่เข้าถึงโดยสุ่ม โดยเฉพาะอย่างยิ่งข้อมูล serialization / deserialization และการสาธิตสตรีมที่ไม่ใช่ไฟล์จะมีประโยชน์มาก +1
ThunderGr

7

จาก MSDN สำหรับFileStream:

แสดงสตรีมรอบ ๆ ไฟล์ซึ่งสนับสนุนทั้งการอ่านและเขียนแบบซิงโครนัสและอะซิงโครนัส

และ MSDN สำหรับStreamWriter:

ใช้ TextWriter สำหรับเขียนอักขระไปยังสตรีมในการเข้ารหัสเฉพาะ

ข้อแตกต่างที่ชัดเจนที่สุดคือFileStreamอนุญาตให้อ่าน / เขียนได้ในขณะที่StreamWriterเขียนเท่านั้น

StreamWriterหน้าต่อไปเพิ่ม:

StreamWriter ได้รับการออกแบบมาสำหรับเอาต์พุตอักขระในการเข้ารหัสเฉพาะในขณะที่คลาสที่ได้รับจาก Stream ได้รับการออกแบบสำหรับอินพุตและเอาต์พุตแบบไบต์

ความแตกต่างประการที่สองFileStreamคือสำหรับไบต์ในขณะที่StreamWriterเป็นข้อความ


6

เป็นสองระดับที่แตกต่างกันที่ใช้ในการส่งออกข้อมูลไปยังแหล่งข้อมูลที่รู้จัก

A FileStreamเป็นสตรีมประเภทหนึ่งซึ่งเป็นกลไกเชิงแนวคิดที่ชี้ไปยังตำแหน่งที่ตั้งบางแห่งและสามารถจัดการข้อมูลขาเข้าและ / หรือขาออกไปและกลับจากตำแหน่งนั้นได้ สตรีมมีไว้สำหรับการอ่าน / เขียนไปยังไฟล์การเชื่อมต่อเครือข่ายหน่วยความจำไพพ์คอนโซลการดีบักและติดตามผู้ฟังและแหล่งข้อมูลประเภทอื่น ๆ โดยเฉพาะอย่างยิ่งมีFileStreamอยู่เพื่อดำเนินการอ่านและเขียนไปยังระบบไฟล์ สตรีมส่วนใหญ่มีการใช้งานค่อนข้างต่ำและจัดการกับข้อมูลเป็นไบต์

A StreamWriterคือ Wrapper สำหรับ Stream ที่ช่วยลดความยุ่งยากในการใช้สตรีมนั้นเพื่อส่งออกข้อความธรรมดา มันแสดงวิธีการที่ใช้สตริงแทนไบต์และทำการแปลงที่จำเป็นไปยังและจากอาร์เรย์ไบต์ มีนักเขียนคนอื่น ๆ หลักอื่น ๆ ที่คุณใช้คือXmlTextWriterซึ่งอำนวยความสะดวกในการเขียนข้อมูลในรูปแบบXML นอกจากนี้ยังมีตัวอ่านคู่กับนักเขียนที่ห่อสตรีมและอำนวยความสะดวกในการดึงข้อมูลกลับ


0

ความแตกต่างที่สำคัญอย่างหนึ่ง (นอกเหนือจากความคิดเห็นด้านบน) อาจเป็นได้ว่า FileStream สนับสนุนการเข้าถึงดิสก์แบบสุ่มอ่านและเขียนไปยัง FileStream.Position ที่ระบุ สำหรับการปรับเปลี่ยนไฟล์ขนาดใหญ่นั้นสามารถประเมินค่าได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.