2014-12-25 1 views
8

이것은 나를 괴롭 히고 있습니다. 나는 을 알고있다. 스트림은 추상 클래스이므로 인스턴스화 할 수 없지만 클래스에서 파생 된 클래스가있다. 왜 위해 StreamReader 클래스 (StreamWriter를Stream.Write() 및 그 구절)을 Stream.Read() 방법이있다? 300 만 가지의 다른 방법을 사용하여 텍스트 파일에 쓸 수 있으며 System.IO 네임 스페이스의 다양한 유형과 방법에 대해 머리 글자를 쓰려고 오히려 실망 스럽습니다. 작가와 독자 객체 또는 파생 된 스트림 객체 자체의 차이점에 대한 질문과 대답을 찾았으나이 특별한 경우에는 아무 것도 발견하지 못했습니다.StreamReader()가있을 때 StreamReader의 용도는 무엇입니까?

+0

'StreamReader'는 추상 클래스이므로'StreamReader()'메소드를 호출하기 위해서는'TextReader'와 같은 구체적인 클래스의 객체가 필요합니다. 클래스와 메소드는 중복되지 않습니다. –

답변

11

TextReader (StreamReader)은 문자열로 작동합니다. Stream은 바이트와 함께 작동합니다. 텍스트와 바이트 사이의 변환은 Encoding에 의해 수행됩니다.

파일 텍스트 또는 이진 파일의 내용에 따라 적절한 클래스를 선택하십시오.

difference between text and bytes을 이해하는 것이 중요합니다.

+0

'StreamReader'는 텍스트와 함께 작동합니다. TextReader로부터 파생됩니다. 'Stream'은 텍스트 기반 작업을 지원하지 않기 때문에'StreamReader' *는'Stream'을 래핑합니다. 당신이 가지고있는 모든 것이'스트림'일 때 어떻게 파일에 문자열을 쓸 것입니까? – usr

+0

죄송합니다. 마지막 코멘트를 무시하고 잘못 읽었습니다. 스트림이 바이트와 함께 작동하는 경우 왜 Microsoft는 텍스트와 함께 작동하는 경우 StreamReader라고 말했습니까? FCL은 때로는 너무 융합 될 수 있습니다. – Bagofsheep

+1

그들은'StreamTextReader' 또는'StreamBasedTextReader'라고 불러야합니다. 그 이름을 축약 된 것으로 생각하십시오 ... 제가 이것을 배울 때도 똑같은 말을했기 때문에 당신의 혼란을 이해합니다. 이 개념에 대한 경험이 있으면 완전히 이해할 수 있습니다. – usr

2

StreamReaderTextReader이며 이는 Stream 래퍼를 의미합니다. TextReader은 텍스트 데이터 (문자열 또는 문자)를 byte []로 변환 (또는 인코딩)하고 기본이되는 Stream에 기록합니다. 두 구현 사이의 차이를 살펴보면

, 당신은 StreamReader 선언으로, 텍스트 대신 바이트 다루고있는, TextReader에서 파생 것을 볼 수 있습니다. 그것은 텍스트 표현으로 작업하고 싶은 사용자를위한 추상화로 생각됩니다. 물론 기본 구현에는 이러한 데이터를 사용하기 위해 Stream이 필요하지만 최종 사용자에게는 수준 높은 추상화가 제공됩니다. 당신은 스트림 클래스를 사용하면 읽기 위해 파일을 액세스하고 쓸 수 있습니다 사용하는 경우

1

이 두 케이스는 다른 시나리오

에 사용됩니다. 그러나 streamreader 클래스를 사용할 때 읽기 전용으로 사용할 수 있습니다. 이렇게하면 파일을 쓸 수 없게됩니다. 때때로이 클래스는 보안 목적으로 사용됩니다. 예 : 읽기 전용 인 시스템 파일의 경우.