Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

StringWriter เทียบ StringReader ใน C#

ภาพรวม

StringWriter และ StringReader มาจาก TextWriter และ TextReader ตามลำดับ ใช้สำหรับอ่าน/เขียนข้อมูลสตริงในหน่วยความจำ (In-Memory) แทนที่จะเป็นไฟล์จริง

StringWriter - เขียนข้อมูลลง String Buffer

ใช้สำหรับสร้างสตริงอย่างมีประสิทธิภาพ โดยเฉพาะการต่อสตริงหลายครั้ง

คุณสมบัติหลัก

  • Implements TextWriter
  • เก็บข้อมูลใน StringBuilder ภายใน
  • มีเมธอด ToString() เพื่อดึงผลลัพธ์
  • รองรับ Write(), WriteLine(), Flush()

ตัวอย่าง StringWriter

using System;
using System.IO;

class Demo {
    static void Main() {
        // สร้าง StringWriter
        using (StringWriter writer = new StringWriter()) {
            writer.WriteLine("Line 1: Hello");
            writer.WriteLine("Line 2: World");
            writer.Write("Line 3: ");
            writer.Write("End");
            
            // ดึงผลลัพธ์เป็น String
            string result = writer.ToString();
            Console.WriteLine("Result:");
            Console.WriteLine(result);
        }
    }
}

StringReader - อ่านข้อมูลจาก String

ใช้สำหรับอ่านสตริงทีละบรรทัด หรือทีละตัวอักษร เหมือนอ่านไฟล์แต่แหล่งที่มาคือ String ในหน่วยความจำ

คุณสมบัติหลัก

  • Implements TextReader
  • Constructor รับ String หรือ StringBuilder
  • มีเมธอด Read(), ReadLine(), ReadToEnd(), Peek()

ตัวอย่าง StringReader

using System;
using System.IO;
using System.Text;

class Demo {
    static void Main() {
        // สร้างข้อมูลทดสอบด้วย StringBuilder
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("Line one characters");
        sb.AppendLine("Line two characters");
        sb.AppendLine("Line three characters");
        
        // อ่านด้วย StringReader
        using (StringReader reader = new StringReader(sb.ToString())) {
            string line;
            int lineNumber = 1;
            
            // อ่านทีละบรรทัด
            while ((line = reader.ReadLine()) != null) {
                Console.WriteLine($"Line {lineNumber++}: {line}");
            }
        }
        
        // หรืออ่านทั้งหมดทีเดียว
        using (StringReader reader = new StringReader(sb.ToString())) {
            string all = reader.ReadToEnd();
            Console.WriteLine("\n--- All at once ---");
            Console.WriteLine(all);
        }
    }
}

ตัวอย่างรวม: เขียนด้วย StringWriter แล้วอ่านด้วย StringReader

using System;
using System.IO;

class Demo {
    static void Main() {
        // เขียนข้อมูล
        using (StringWriter writer = new StringWriter()) {
            writer.WriteLine("Header: Report Data");
            writer.WriteLine("Date: " + DateTime.Now.ToShortDateString());
            writer.WriteLine("---");
            writer.WriteLine("Item 1: Apple - $1.50");
            writer.WriteLine("Item 2: Banana - $0.75");
            writer.WriteLine("Item 3: Orange - $2.00");
            
            string report = writer.ToString();
            
            // อ่านข้อมูลกลับ
            using (StringReader reader = new StringReader(report)) {
                Console.WriteLine("=== Reading Report ===");
                string line;
                while ((line = reader.ReadLine()) != null) {
                    Console.WriteLine($"[LOG] {line}");
                }
            }
        }
    }
}

ตารางเปรียบเทียบ

คุณสมบัติ StringWriter StringReader
Base Class TextWriter TextReader
ทิศทาง Output (เขียน) Input (อ่าน)
แหล่งข้อมูล/ปลายทาง StringBuilder (Internal) String / StringBuilder (Constructor)
เมธอดหลัก Write, WriteLine, Flush, ToString Read, ReadLine, ReadToEnd, Peek
การใช้งานทั่วไป สร้าง Log, Report, XML, JSON Parse String, อ่าน Config, Test Input

เมื่อไหร่ควรใช้?

  • StringWriter: ต้องการสร้างข้อความจำนวนมาก แทน String Concatenation หรือ StringBuilder โดยตรง
  • StringReader: ต้องการอ่าน String แบบ Streaming (ทีละบรรทัด/ตัวอักษร) หรือจำลอง Input Stream สำหรับ Unit Test