문제

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

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

  • stream
  • read stream
  • write stream

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

도움이 되었습니까?

해결책

개울 데이터를 전송하는 데 사용되는 객체입니다. 일반적인 스트림 클래스가 있습니다 System.IO.Stream, .NET의 다른 모든 스트림 클래스가 도출되는 것. 그만큼 Stream 수업은 바이트와 거래합니다.

콘크리트 스트림 클래스는 바이트 이외의 다른 유형의 데이터를 처리하는 데 사용됩니다. 예를 들어:

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

독자/작가 스트림과 같은 StreamReader 그리고 StreamWriter 스트림이 아닙니다 - 그들은 파생되지 않습니다 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 등.

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

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

기본 유형은 하나뿐입니다 Stream. 그러나 다양한 상황에서 일부 회원은 호출 할 때 예외를 던질 것입니다.이 맥락에서는 작업을 사용할 수 없었기 때문입니다.

예를 들어 a MemoryStream 단순히 메모리 덩어리로 바이트를 움직이는 방법입니다. 따라서 읽기 및 쓸 수 있습니다.

반면에 a FileStream 파일에서/로 읽거나 쓰기 (또는 둘 다) 할 수 있습니다. 실제로 읽거나 쓸 수 있는지 여부는 파일이 열리는 방식에 따라 다릅니다. 읽기 액세스를 위해서만 열면 파일에 글을 쓸 수 없습니다.

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

MemoryStream 및 Filestream은 각각 원시 메모리 및 파일로 작동하는 데 사용되는 스트림입니다.

나는 그 다른 종류의 스트림을 부르지 않을 것입니다. 스트림 클래스에는 특정 스트림을 읽고 쓸 수 있는지 알려주는 속성을 사용할 수 있습니다.

다른 스트림 클래스 (예 : MemoryStream vs Filestream)의 주요 차이점은 백업 저장소입니다. 데이터가 읽거나 작성되는 위치입니다. 이름에서 분명합니다. MemoryStream은 데이터를 메모리에만 저장하고, Filestream은 디스크의 파일에 의해 뒷받침되며, NetworkStream은 네트워크에서 데이터를 읽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top