2012-04-03 4 views
1

잠시 동안 TcpClient의 NetworkStream에 대한 래퍼로 StreamReader/Writer를 사용했습니다. 주로 단순화하고 시간을 절약하기위한 것입니다.스트림의 장점/단점

연결 판독기/작성기로 작업 할 때 정상적으로 작동하지만, 도우미 클래스를 사용하지 않는 엔드 포인트에서 이러한 도우미 클래스 중 하나를 사용하면 이상한 일이 발생하기 시작했습니다. . 스트림에 추가 된 불필요한 바이트 및 기타 이상한 것들.

이 래퍼를 사용하면 오버 헤드가 발생할 수 있습니다. 또는 C++ 또는 PHP와 같은 다른 언어로 클라이언트를 개발할 때 호환성 문제가 발생할 수 있습니다.

StreamReader 및 StreamWriter 도우미 클래스를 사용하면 어떤 이점이 있습니까? (오류 처리 라인 또는 그 밖의 다른 행을 따라)

+0

텍스트 판독기와 작성기는 버퍼링 된 읽기 및 쓰기를하는 경향이 있습니다. 이 동작에 대한 문서를 참조하십시오. – leppie

+0

"이상한 것들"은 프로토콜 사양, 주로 인코딩에 대한 이해가 떨어지면 사라집니다. –

답변

3

StreamReader/Writer를 사용하면 스트림과 텍스트 데이터를 쉽게 저장/읽을 수 있습니다. 값을 올바른 인코딩의 텍스트 표현으로 변환하는 것 외에 추가 오버 헤드가 없습니다. 양측이 인코딩에 동의하는 한 다른 언어의 텍스트 스트림을 사용하는 데 문제가 없어야합니다. 즉, 하나는 BOM이있는 기본 UTF-8입니다.

"앞에 여분의 바이트가 있습니다."는 Byte Order Mark (BOM)입니다.이 코드는 독자를 구성 할 때 끌 수 있습니다 (유니 코드 UTF-8/7/16 인코딩 전용).

이진 통신을 위해 원시 스트림을 사용하는 목표에 따라 더 빠르고 더 빠를 수 있습니다.

0

나는 당신이 ReadLine과 WriteLine을 사용하고 있고 일관성없는 결과를보고 있다고 가정합니다.

먼저 StreamReader는 UTF-8 문자를 사용한다고 가정합니다.이 문자는 다른 쪽에서 보내지는 문자가 아닐 수도 있습니다. StreamReader를 만들 때 인코딩을 설정할 수 있습니다.

둘째, StreamReader는 줄 끝이 \ n, \ r 또는 \ r \ n으로 가정합니다. 즉, 다른 쪽 끝이 줄 바꿈 문자를 \ n \ r으로 보내면 우연히 발생합니다.

세 번째로, 예, 스트림 리더에 줄 바꿈이 있습니다. 입력을 버퍼링하여 줄 바꿈을 찾습니다. 그러나 그것 없이는 새로운 라인이 발견 될 때까지 훨씬 더 어렵습니다.

+0

Read, ReadBlock 및 Write를 사용하고 있습니다. – caesay

+0

StreamReader/Writer가 UTF8로 고정되어 있지 않습니다. –

+0

@HenkHolterman - 저는 그것이 생성자에서 변경 될 수 있다고 말하지 않았습니다. –