2013-03-07 3 views
2

질문은 간단합니다 : 네트워크 스트림의 StreamWriter에있는 WriteLine()이 항상 전체 라인을 전달합니까? 아니면 몇 가지 제한 사항이 있습니까? 예를 들어, 그것은 단지 약간의 크기의 선만 전달합니다.WriteLine() 네트워크 스트림의 StreamWriter에서 항상 전체 줄을 전달합니까?

WriteLine (한 줄에 아주 긴 문자열 (예 : 10000000 자))을 호출하면 StreamReader의 ReadLine()이 내가 보낸 것처럼받습니다. 아니면 일부분 만 받게 될 것입니까?

+0

을 그 RAM, 스크래치 공간, 주소 공간 같은 물리적 인 문제가 발생할 수 있습니다 ...하지만 당신이하지 않는 한 믿습니다. 닫고, 라인 종결자를 추가하거나 추가 한 다음 하나의 연속 선으로 저장합니다. –

답변

1

그것에 관계없이 ALL을 쓰고 읽습니다.

예를 들어, 내가 BigIntegers 작업 및 WriteLine를 사용하여 183,000 이상 자리와 스트림 번호를 작성을 사용하고있었습니다 만 오늘 아침 (이기는하지만 그것은 잠시했다!).

1

WriteLine은 문자열을 여러 패킷으로 분할 할 수 있지만, 반대쪽 끝에 ReadLine을 사용하는 한 신경 쓸 필요가 없습니다.

ReadLine은 여러 패킷으로 구성되어 있는지 여부에 관계없이 연결이 실패하지 않는 경우 (충분한 메모리가있는 경우 등) 항상 전체 라인을 읽습니다.

더욱 정확하게는 StreamWriter은 항상 문자열 전체를 네트워크 스트림에 전달합니다. 문자열은 문자열, 네트워크 구성 등을 비롯한 여러 요소에 따라 전체 문자열을 한 번에 전송하거나 전송하지 않을 수도 있습니다. 다른 끝, 비슷한 일이 일어난다. NetworkStream.Read는 한 번에 읽는만큼 많은 양을 읽어서 StreamReader로 전달하지만, StreamReader.ReadLine을 사용하는 경우 메서드는 완전한 줄이 생길 때까지 아무 것도 반환하지 않습니다.

2
항상 전체 라인을 읽을 (또는 OutOfMemoryException을 생산) 할 스트림의 다른 끝에서 StreamReader

예, ReadLine,하지만 더 많은 네트워크 스트림보다 ReadLine의 속성입니다. 네트워크 수준에서 NetworkStream의 경우 일 수 있습니다.은 여러 개의 개별 송수신으로 분할되었습니다.

ReadLine 줄 바꿈 시퀀스가 ​​나타날 때까지 반환되지 않습니다.


(주의 할 - 당신이 WriteLine에 전달할 문자열이 포함되어있는 경우, 내부, 줄 바꿈 시퀀스는, 당신은 첫 번째 줄 바꿈 순서까지 문자열까지의 부분 받게됩니다) 문자열에서

관련 문제