[c#] 스트림을 사용하는 C #

스트림은 나에게 일종의 신비입니다. 언제 어떤 스트림을 사용해야하고 어떻게 사용하는지 모르겠습니다. 누군가 스트림이 어떻게 사용되는지 설명해 줄 수 있습니까?

올바르게 이해하면 세 가지 스트림 유형이 있습니다.

  • stream
  • read stream
  • write stream

이 올바른지? 그리고 예를 들어 a Memorystream와 a 의 차이점은 무엇 FileStream입니까?



답변

스트림 데이터를 전송하는 데 사용되는 것을 목적으로한다. System.IO.Stream.NET의 다른 모든 스트림 클래스가 파생 되는 일반 스트림 클래스 가 있습니다. Stream클래스는 바이트 다룬다.

구체적인 스트림 클래스는 바이트가 아닌 다른 유형의 데이터를 처리하는 데 사용됩니다. 예를 들면 :

  • FileStream외부 소스 파일이있는 경우 클래스 사용
  • MemoryStream 메모리에 데이터를 저장하는 데 사용됩니다.
  • System.Net.Sockets.NetworkStream 네트워크 데이터 처리

리더 / 라이터 같은 스트림 StreamReaderStreamWriter스트림되지 않습니다 -에서 그들이 파생되지 System.IO.Stream들이 쓰기에 도움말을 설계에서 스트림 데이터를 읽어!


답변

여기에서 다른 답변을 조금 확장하고 점선으로 볼 수있는 많은 예제 코드를 설명하기 위해 대부분의 경우 스트림을 직접 읽고 쓰지 않습니다. 스트림은 데이터를 전송하는 저수준 수단입니다.

읽기와 쓰기를위한 함수는 모두 바이트 지향적이라는 것을 알 수 있습니다. 예를 들어 WriteByte (). 정수, 문자열 등을 처리하는 함수는 없습니다. 이는 스트림을 매우 범용 적으로 만들지 만 텍스트를 전송하려는 경우 작업하기가 덜 간단합니다.

그러나 .NET은 네이티브 형식과 하위 수준 스트림 인터페이스간에 변환하는 클래스를 제공하고 데이터를 스트림으로 또는 스트림에서 전송합니다. 주목할만한 클래스는 다음과 같습니다.

StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader

이를 사용하려면 먼저 스트림을 얻은 다음 위의 클래스 중 하나를 만들어 스트림과 연결합니다. 예

MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);

StreamReader 및 StreamWriter는 네이티브 형식과 해당 문자열 표현간에 변환 한 다음 문자열과 스트림간에 바이트로 문자열을 전송합니다. 그래서

myStreamWriter.Write(123);

스트림에 “123”(3 개의 문자 ‘1’, ‘2’, ‘3’)을 씁니다. 텍스트 파일 (예 : html)을 다루는 경우 StreamReader 및 StreamWriter가 사용할 클래스입니다.

이므로

myBinaryWriter.Write(123);

32 비트 정수 값 123 (0x7B, 0x00, 0x00, 0x00)을 나타내는 4 바이트를 기록합니다. 바이너리 파일이나 네트워크 프로토콜을 다루는 경우 BinaryReader 및 BinaryWriter를 사용할 수 있습니다. (네트워크 또는 다른 시스템과 데이터를 교환하는 경우 엔디안을 염두에 두어야 하지만 이는 또 다른 게시물입니다.)


답변

스트림은 많은 양의 데이터를 처리하는 데 적합합니다. 모든 데이터를 동시에 메모리에로드하는 것이 비현실적인 경우 스트림으로 열고 작은 덩어리로 작업 할 수 있습니다.


답변

스트림은 physical바이트 스트림에 대한 추상화 (또는 래퍼) 일뿐 입니다. 이 physical스트림을 base stream. 그래서 스트림 래퍼 즉 기본 스트림 입력 한 후 생성되고, 따라서 래퍼의 이름은 어떤을 통해 기본 스트림 항상있다 FileStream, MemoryStream

스트림 래퍼의 장점은 기본 유형 usb, file등의 스트림과 상호 작용할 수있는 통합 API를 얻는 것입니다 .

데이터를 스트림으로 취급하는 이유 -데이터 청크는 온 디맨드로로드되기 때문에 전체 데이터를 메모리에로드하는 대신 데이터를 청크로 검사 / 처리 할 수 ​​있습니다. 이것은 대부분의 프로그램이 OS 이미지 파일 암호화와 같은 대용량 파일을 처리하는 방법입니다.


답변

기본 유형은 하나뿐입니다 Stream. 그러나 다양한 상황에서 일부 구성원은 해당 컨텍스트에서 작업을 사용할 수 없기 때문에 호출 될 때 예외를 throw합니다.

예를 들어 a MemoryStream는 단순히 메모리 청크 안팎으로 바이트를 이동하는 방법입니다. 따라서 읽기 및 쓰기를 호출 할 수 있습니다.

반면에 a를 FileStream사용하면 파일에서 읽거나 쓸 수 있습니다 (또는 둘 다). 실제로 읽기 또는 쓰기가 가능한지 여부는 파일이 열린 방식에 따라 다릅니다. 읽기 권한으로 만 파일을 연 경우 파일에 쓸 수 없습니다.


답변

MSDN의 스트림을 읽는 것으로 시작합니다.
http://msdn.microsoft.com/en-us/library/system.io.stream.aspx

Memorystream 및 FileStream은 각각 원시 메모리 및 파일 작업에 사용되는 스트림입니다.


답변

나는 그런 다른 종류의 스트림이라고 부르지 않을 것입니다. Stream 클래스에는 특정 스트림을 읽고 쓸 수 있는지 여부를 알려주는 CanRead 및 CanWrite 속성이 있습니다.

서로 다른 스트림 클래스 (예 : MemoryStream 대 FileStream) 간의 주요 차이점은 데이터를 읽거나 쓰는 위치 인 백업 저장소입니다. 이름에서 알 수 있습니다. MemoryStream은 데이터를 메모리에만 저장하고 FileStream은 디스크의 파일에 의해 지원되며 NetworkStream은 네트워크에서 데이터를 읽는 등의 작업을 수행합니다.