이것은 나를 괴롭 히고 있습니다. 나는 을 알고있다. 스트림은 추상 클래스이므로 인스턴스화 할 수 없지만 클래스에서 파생 된 클래스가있다. 왜 위해 StreamReader 클래스 (StreamWriter를 및 Stream.Write() 및 그 구절)을 Stream.Read() 방법이있다? 300 만 가지의 다른 방법을 사용하여 텍스트 파일에 쓸 수 있으며 System.IO 네임 스페이스의 다양한 유형과 방법에 대해 머리 글자를 쓰려고 오히려 실망 스럽습니다. 작가와 독자 객체 또는 파생 된 스트림 객체 자체의 차이점에 대한 질문과 대답을 찾았으나이 특별한 경우에는 아무 것도 발견하지 못했습니다.StreamReader()가있을 때 StreamReader의 용도는 무엇입니까?
답변
TextReader
(StreamReader
)은 문자열로 작동합니다. Stream
은 바이트와 함께 작동합니다. 텍스트와 바이트 사이의 변환은 Encoding
에 의해 수행됩니다.
파일 텍스트 또는 이진 파일의 내용에 따라 적절한 클래스를 선택하십시오.
difference between text and bytes을 이해하는 것이 중요합니다.
'StreamReader'는 텍스트와 함께 작동합니다. TextReader로부터 파생됩니다. 'Stream'은 텍스트 기반 작업을 지원하지 않기 때문에'StreamReader' *는'Stream'을 래핑합니다. 당신이 가지고있는 모든 것이'스트림'일 때 어떻게 파일에 문자열을 쓸 것입니까? – usr
죄송합니다. 마지막 코멘트를 무시하고 잘못 읽었습니다. 스트림이 바이트와 함께 작동하는 경우 왜 Microsoft는 텍스트와 함께 작동하는 경우 StreamReader라고 말했습니까? FCL은 때로는 너무 융합 될 수 있습니다. – Bagofsheep
그들은'StreamTextReader' 또는'StreamBasedTextReader'라고 불러야합니다. 그 이름을 축약 된 것으로 생각하십시오 ... 제가 이것을 배울 때도 똑같은 말을했기 때문에 당신의 혼란을 이해합니다. 이 개념에 대한 경험이 있으면 완전히 이해할 수 있습니다. – usr
StreamReader
은 TextReader
이며 이는 Stream
래퍼를 의미합니다. TextReader
은 텍스트 데이터 (문자열 또는 문자)를 byte []로 변환 (또는 인코딩)하고 기본이되는 Stream
에 기록합니다. 두 구현 사이의 차이를 살펴보면
StreamReader
선언으로, 텍스트 대신 바이트 다루고있는,
TextReader
에서 파생 것을 볼 수 있습니다. 그것은 텍스트 표현으로 작업하고 싶은 사용자를위한 추상화로 생각됩니다. 물론 기본 구현에는 이러한 데이터를 사용하기 위해
Stream
이 필요하지만 최종 사용자에게는 수준 높은 추상화가 제공됩니다. 당신은 스트림 클래스를 사용하면 읽기 위해 파일을 액세스하고 쓸 수 있습니다 사용하는 경우
이 두 케이스는 다른 시나리오
에 사용됩니다. 그러나 streamreader 클래스를 사용할 때 읽기 전용으로 사용할 수 있습니다. 이렇게하면 파일을 쓸 수 없게됩니다. 때때로이 클래스는 보안 목적으로 사용됩니다. 예 : 읽기 전용 인 시스템 파일의 경우.
'StreamReader'는 추상 클래스이므로'StreamReader()'메소드를 호출하기 위해서는'TextReader'와 같은 구체적인 클래스의 객체가 필요합니다. 클래스와 메소드는 중복되지 않습니다. –