문제
스트림은 나에게 신비스럽습니다.언제 어떤 스트림을 사용해야 하는지, 어떻게 사용해야 하는지 모르겠습니다.누군가 스트림이 어떻게 사용되는지 설명해 줄 수 있나요?
내가 올바르게 이해했다면 세 가지 스트림 유형이 있습니다.
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은 네트워크에서 데이터를 읽습니다.