문제

나는 이 스트림의 표현의 순서를 바이트 단위이다.각 스트림 제공하는 것을 의미한 읽기와 쓰기를 바이트를 주어진 백업 저장소가 있습니다.하지만 무엇입의 포인트는 스트림?지 않는 이유는 백업장 자체 무엇을 우리는 상호 작용하니까?

어떤 이유로든 이 개념이 없을 클릭한다.내가 읽은 기사의 무리지만,나는 생각해야 비유 또는 무언가이다.

도움이 되었습니까?

해결책

단어"스트림"선택되었기 때문에 그것을 나타내는(실제 생활에서)매우 유사한 의미를 우리가 무엇을 전하고 싶을 때 우리는 그것을 사용합니다.

자에 대해 잊지 백업 저장소에 대한 약간의 생각을 시작에 관한 비유를 물니다.을 받은 지속적인 데이터 흐름처럼 물이 계속 흘러에 위치하고 있습니다.당신이하지 않는 반드시 알고있는 데이터가에서 나오는,그리고 대부분은 당신이 필요하지 않;그것은 파일에서 소켓이나 다른 소스지(안)정말 문제입니다.이것은 매우 비슷하의 스트림을 수신 물,그것에 의하여 당신이 알 필요가 없는 곳에서 오는;그것은 호수에서,분수,또는 다른 소스지(안)정말 문제입니다.

는 말했다,당신이 시작하면 생각만 관리에 대해 필요한 데이터를 위치에 관계없이 그것에서는,추상화 다른 사람들에 대해 이야기하고 있다.당신이 생각하기 시작할 수 있는 포장 스트림,그리고 당신의 방법이 여전히 완벽하게 작동합니다.예를 들어,당신은 이렇게 할 수 있다:

int ReadInt(StreamReader reader) { return Int32.Parse(reader.ReadLine()); }

// in another method:
Stream fileStream = new FileStream("My Data.dat");
Stream zipStream = new ZipDecompressorStream(fileStream);
Stream decryptedStream = new DecryptionStream(zipStream);
StreamReader reader = new StreamReader(decryptedStream);

int x = ReadInt(reader);

당신이 볼로,그것은 매우 쉽게 변경할 수의 입력 소스를 변경하지 않고도 처리합니다.예를 들어,데이터를 읽 네트워크에서 소켓이 파일 대신:

Stream stream = new NetworkStream(mySocket);
StreamReader reader = new StreamReader(stream);
int x = ReadInt(reader);

만큼 쉬운 일이 될 수 있습니다.과 아름다움을 계속 사용할 수 있기 때문에,어떤 종류의 입력 소스로를 구축할 수 있습니다 스트림"wrapper"습니다.할 수 있도 이 명령어를 사용:

public class RandomNumbersStreamReader : StreamReader {
    private Random random = new Random();

    public String ReadLine() { return random.Next().ToString(); }
}

// and to call it:
int x = ReadInt(new RandomNumbersStreamReader());

십니까?로 당신의 방법은 걱정하지 않는 어떤 입력원이 사용할 수 있는 소스에서 다양한 방법이다.추상화할 수 있습을 분리하려면 입력 처리에서 논리에 매우 우아한 방법입니다.

참고 스트림을 만들었습에 자신 없는 백업장이지만,그것은 여전히 역 우리의 목적에 완벽하다.

그래서,요약,스트림은 단지 소스의 입력이 숨어있다(추)다른 소스입니다.만큼 당신은 파괴하지 않는 이상의 코드가 매우 유연합니다.

다른 팁

요점은 후원 저장소가 무엇인지 알 필요가 없다는 것입니다. 실제로, 심지어도 없을 수도 있습니다 ~이다 백업 스토어 - 네트워크에서 읽을 수 있으며 데이터는 전혀 "저장"되지 않습니다.

파일 시스템, 메모리, 네트워크 또는 스트림 아이디어를 지원하는 다른 제품과 대화하는지에 관계없이 작동하는 코드를 작성할 수있는 경우 코드는 훨씬 유연합니다.

또한 스트림은 종종 함께 묶여 있습니다. 압축 양식을 다른 스트림에 쓰거나 데이터를 암호화하는 스트림을 가질 수 있습니다. 다른 쪽 끝에는 역전이있을 수 있습니다. 체인, 암호 해독, 압축 압축 또는 무엇이든.

스트림의 요점은 귀하와 백킹 스토어 사이에 추상화 계층을 제공하는 것입니다. 따라서 스트림을 사용하는 주어진 코드 블록은 백업 스토어가 디스크 파일, 메모리 등이든 상관하지 않아도됩니다.

스트림에 관한 것이 아닙니다 - 수영에 관한 것입니다. 하나의 스트림을 수영 할 수 있다면, 당신이 겪는 스트림을 수영 할 수 있습니다.

을 추가하여 에코 챔버,스트림은 추출 그래서 당신 걱정하지 않는 기본 저장합니다.그것은 대부분의 감각을 고려할 때는 시나리오 없는 스트림이 있습니다.

파일은 재미없는 대부분의 경기 때문에 스트림에 많은 일을 하지 않는 수준 이상의 비트 스트림으로 나는 익숙했다.시작하자는 인터넷 파일이 있습니다.

하고 싶은 경우에 다운로드 파일 인터넷에서 내가 열어 TCP 소켓 연결을 만들고,수신 바이트를 더 이상 없을 때까지 바이트입니다.을 관리,버퍼 크기의 예상된 파일을 작성하는 코드를 검출할 때 연결이 떨어졌다고 이것을 처리합니다.

말하자 나는 몇 가지 종류의 TcpDataStream 개체입니다.나는 그것을 만들과 함께 해당 연결 정보를 읽을 다음,바이트 스트림에서 때까지 그것은 말이 없 더 바이트입니다.스트림 처리 버퍼 관리 end-of-데이터 조건,그리고 연결을 관리합니다.

이 방법으로,스트림을 만들 I/O 쉽습니다.할 수 있는 확실히 작성 TcpFileDownloader 는 클래스가 무엇이 스트림 않지만,당신은 클래스의 특정 TCP.대부분의 스트림 인터페이스를 단순히 제공하 Read()및 Write()메서드,그리고 더 복잡한 개념에 의해 처리되는 내부 구현합니다.이 때문에 사용할 수 있습니다 같은 기본 코드를 읽거나 쓰려하는 메모리 디스크 파일,sockets,그리고 많은 다른 데이터 저장합니다.

그것은 단지 당신의 삶을 더 편하게 만드는 개념, 또 다른 추상화 수준입니다. 그리고 그들은 모두 공통 인터페이스를 가지고있어서 당신이 그것들을 파이프와 같은 방식으로 결합 할 수 있음을 의미합니다. 예를 들어, Base64로 인코딩 한 다음 지퍼를 한 다음 디스크와 한 줄에 작성하십시오!

내가 사용하는 시각화는 컨베이어 벨트입니다. 실제 공장은 아닙니다. 왜냐하면 나는 그것에 대해 아무것도 모르기 때문입니다. 왜냐하면 아이템이 선을 따라 움직이고 스탬프를 찍고 박스를 세우고 계산하고 일련의 멍청한 장치로 확인하는 만화 공장에서는 컨베이어 벨트입니다.

케이크에 체리를 넣는 장치와 같은 한 가지를 수행하는 간단한 구성 요소가 있습니다. 이 장치에는 체리가없는 케이크의 입력 스트림과 체리가있는 케이크 출력 스트림이 있습니다. 이런 식으로 처리를 구조화하는 것을 언급 할 가치가있는 세 가지 장점이 있습니다.

먼저 구성 요소 자체를 단순화합니다. 케이크에 초콜릿 착빙을 넣으려면 케이크에 대한 모든 것을 알고있는 복잡한 장치가 필요하지 않으면 공급되는 모든 것에 초콜릿 착빙을 막는 멍청한 장치를 만들 수 있습니다. 만화, 이것은 다음 아이템이 케이크가 아니라 Wile E. Coyote라는 것을 모르는 한입니다.

둘째, 장치를 다른 시퀀스에 넣어서 다른 제품을 만들 수 있습니다. 아마도 케이크가 아이싱 위에 체리 대신 체리 위에 착빙을 원할 수도 있습니다. .

셋째, 장치는 인벤토리, 권투 또는 개봉을 관리 할 필요가 없습니다. 가장 효율적인 집계 및 포장 방법은 변할 수 있습니다. 아마도 오늘은 케이크를 48의 상자에 넣고 트럭로드로 보내고 있지만 내일에는 맞춤 주문에 대한 6 개의 상자를 보내려고합니다. 이러한 종류의 변화는 생산 라인의 시작과 끝에서 기계를 교체하거나 재구성함으로써 수용 할 수 있습니다. 한 번에 다른 수의 항목을 처리하기 위해 라인 중간의 체리 머신을 변경할 필요가 없으며 한 번에 하나의 항목과 함께 작동하며 입력 또는 출력의 방법을 알 필요가 없습니다. 그룹화되고 있습니다.

처음으로 스트리밍에 대해 들었을 때, 그것은 맥락에있었습니다. 라이브 스트리밍 웹캠으로. 따라서 한 호스트는 비디오 컨텐츠를 방송하고 다른 호스트는 비디오 컨텐츠를 받고 있습니다. 그래서 이것은 스트리밍입니까? 글쎄 ... 예 ...하지만 라이브 스트림은 구체적인 개념이며, 그 질문은 추상적 인 스트리밍 개념을 지칭한다고 생각합니다. 보다 https://en.wikipedia.org/wiki/live_streaming

그래서 계속하자.


비디오가 스트리밍 할 수있는 유일한 리소스는 아닙니다. 소리를 스트리밍 할 수 있습니다. 그래서 우리는 지금 스트리밍 미디어에 대해 이야기하고 있습니다. 보다 https://en.wikipedia.org/wiki/streaming_media . 이제 일부 데이터 전달 방법을 서로 비교해 봅시다.

클래식 파일 다운로드실시간이 발생하지 않습니다. 파일을 사용하기 전에 다운로드가 완료 될 때까지 기다려야합니다.

진보적 인 다운로드비디오 파일을 다운로드 할 때 시청할 수 있습니다. 빠르게 진행되고 되감기가 가능합니다. 그렇게하려면 비디오 파일을 수신하는 컴퓨터의 메모리에 데이터를 임시로 저장하는 버퍼를 사용합니다. 데이터가 청크 되더라도 실제 스트리밍은 아닙니다.

스트리밍실시간이 발생하고 데이터를 청크합니다. 스트리밍은 라이브 방송에서 구현됩니다. 방송을 듣는 고객은 빠르게 진행되거나 되감기를 할 수 없습니다. 비디오 스트림에서는 재생 후 데이터가 폐기됩니다.

스트리밍 서버는 클라이언트와의 2 방향 연결을 유지하고 서버는 서버 응답 후 연결을 닫습니다.


오디오와 비디오 만 스트리밍 할 수있는 유일한 것은 아닙니다. PHP 매뉴얼의 스트림 개념을 살펴 보겠습니다.

스트림은 스트림 가능한 동작을 나타내는 자원 객체입니다. 즉, 그럴 수 있습니다 읽으십시오 또는 작성 선형적인 방식으로, 스트림 내의 임의의 위치로 ()를 fseek () 할 수 있습니다.

PHP에서 리소스는 파일 데이터베이스 연결과 같은 외부 소스에 대한 참조입니다. 다시 말해, 스트림은 읽거나 쓸 수있는 소스입니다. 그래서 당신이 함께 일했다면 fopen(), 당신은 이미 스트림과 함께 일했습니다.

텍스트, 오디오, 지퍼 파일도 스트리밍 할 수 있습니다. 또한 스트리밍은 파일에만 국한되지 않습니다. HTTP, FTP, SSH 연결 및 입력/출력도 스트리밍 할 수 있습니다.


Wikipedia는 스트리밍 개념에 대해 무엇을 말합니까?

컴퓨터 과학에서 스트림은 시간이 지남에 따라 제공되는 일련의 데이터 요소입니다. 스트림은 컨베이어 벨트의 항목으로 큰 배치가 아닌 한 번에 하나씩 처리되는 것으로 생각할 수 있습니다.

보다: https://en.wikipedia.org/wiki/stream_%28computing%29 .

Wikipedia 링크 : https://srfi.schemers.org/srfi-41/srfi-41.html그리고 작가들은 이것을 스트림에 대해 말할 것입니다.

때때로 게으른 목록이라고도하는 스트림은 주문형에만 계산 된 요소를 포함하는 순차적 인 데이터 구조입니다. 스트림은 NULL이거나 CDR에 스트림이있는 쌍입니다. 스트림의 요소는 액세스 할 때만 계산되므로 스트림은 무한 할 수 있습니다.

따라서 스트림은 실제로 데이터 구조입니다.


내 결론 : 스트림은 순차적으로 읽거나 쓸 수있는 데이터를 포함 할 수있는 소스입니다. 스트림은 소스에 한 번에 포함 된 모든 것을 읽지 않으며 순차적으로 읽거나 씁니다.


유용한 링크 :

  1. http://www.slideshare.net/auroraeosrose/writing-and-using-php-streams-and-sockets-zendcon-2011 매우 명확한 프레젠테이션을 제공합니다
  2. https://www.sk89q.com/2010/04/introduction-to-php-streams/
  3. http://www.netlingo.com/word/stream-or-streaming.php
  4. http://www.brainbell.com/tutorials/php/using_php_streams.htm
  5. http://www.sitepoint.com/php-streaming output-buffering-emplained/
  6. http://php.net/manual/en/wrappers.php
  7. http://php.net/manual/en/intro.stream.php
  8. http://www.digidata-lb.com/streaming/streaming_proposal.pdf
  9. http://www.webopedia.com/term/s/streaming.html
  10. https://en.wikipedia.org/wiki/stream_%28computing%29
  11. https://srfi.schemers.org/srfi-41/srfi-41.html

내가 본 스트림에 대한 가장 좋은 설명은입니다 SICP의 3 장. (이해하려면 처음 두 장을 읽어야 할 수도 있지만 어쨌든해야합니다. :-)

그들은 바이트에 스테람을 전혀 사용하지 않고 오히려 정수를 사용합니다. 내가 얻은 큰 요점은 다음과 같습니다.

  • 스트림은 지연된 목록입니다
  • 어떤 경우에는 모든 것을 간절히 컴퓨팅하는 것]의 계산 간접비는 터무니 없다.
  • 스트림을 사용하여 무한히 긴 시퀀스를 나타낼 수 있습니다.

또 다른 요점 (파일 읽기 상황) :

  1. stream 전에 다른 일을 할 수 있습니다 finished reading all content of the file.
  2. 모든 파일 컨텐츠를 한 번에로드 할 필요가 없으므로 메모리를 저장할 수 있습니다.

추상 데이터 소스 (바이트, 문자 등)로 스트림을 생각하십시오. 그들은 네트워크 소켓, 디스크의 파일 또는 웹 서버의 응답이든 콘크리트 데이터 소스를 읽고 쓰는 실제 역학을 추상화합니다.

백업 스토어 자체는 종종 또 다른 추상화라고 생각해야한다고 생각합니다. 메모리 스트림은 이해하기 쉽지만 사용중인 파일 시스템에 따라 파일은 근본적으로 다릅니다. 어떤 하드 드라이브를 사용하고 있는지 신경 쓰지 마십시오. 모든 스트림이 실제로 백킹 스토어 위에 앉아있는 것은 아닙니다. 네트워크 스트림은 거의 스트림 일뿐입니다.

스트림의 요점은 우리가 중요한 것에 관심을 제한한다는 것입니다. 표준 추상화를 통해 공통 작업을 수행 할 수 있습니다. 예를 들어, 오늘 URL에 대한 파일이나 HTTP 응답을 검색하고 싶지 않더라도 내일을 원치 않을 것이라는 의미는 아닙니다.

스트림은 원래 스토리지에 비해 메모리가 작을 때 원래 고안되었습니다. C 파일 만 읽는 것만으로는 상당한 부하가 될 수 있습니다. 메모리 발자국을 최소화하는 것이 매우 중요했습니다. 따라서로드해야 할 필요성이 거의없는 추상화는 매우 유용했습니다. 오늘날 네트워크 통신을 수행 할 때도 유용하며 파일을 처리 할 때는 거의 제한적이지 않습니다. 일반적인 방식으로 버퍼링과 같은 것들을 투명하게 추가하는 능력은 더욱 유용합니다.

스트림은 일련의 바이트의 추상화입니다. 아이디어는 바이트가 어디에서 왔는지 알 필요가 없으며 표준화 된 방식으로 읽을 수 있다는 것입니다.

예를 들어 스트림을 통해 데이터를 처리하는 경우 파일, 네트워크 연결, 문자열, 데이터베이스 등의 블로브 등에서 데이터가 나오면 코드에 중요하지 않습니다.

백킹 스토어 구현에 연결되어 있다는 사실을 제외하고는 백킹 스토어 자체와 상호 작용하는 데 잘못된 일이 없습니다.

스트림은 데이터와 상호 작용하기위한 표준 메소드 및 속성 세트를 제공하는 추상화입니다. 실제 스토리지 매체에서 멀리 떨어져있어, 귀하의 코드는 해당 매체가 무엇인지 또는 심지어 해당 매체의 구현에 전적으로 의존하지 않고 작성할 수 있습니다.

좋은 비유는 가방을 고려하는 것일 수 있습니다. 가방이 가방이되는 작업을 수행하고 물건을 다시 꺼낼 수있는 한, 가방이 무엇인지 또는 물건을 넣을 때의 일이 무엇인지 상관하지 않습니다. 스트림은 가방 개념이 가방의 다른 인스턴스 (예 : 쓰레기 백, 핸드백, 배낭 등) - 상호 작용 규칙에 대해 정의합니다.

나는 그것을 짧게 유지할 것입니다. 나는 여기서 단어를 놓치고있었습니다.

스트림은 대기열 일반적으로 모든 종류의 데이터를 포함하는 버퍼에 저장됩니다.

(이제 우리 모두가 줄이 무엇인지 알고 있기 때문에 더 이상 설명 할 필요가 없습니다.)

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