잘은 모르겠지만.. 네트워크 상에서 스트링이라고 하지 않는 이유는...
네트워크에서 지나다니는 실질적인 데이터는 0과 1의 전기적으로 연속된
신호이기 때문에 비트 스트림이라고 한다고 생각하는데요..
스트링은 연속된 문자.. 즉 문자열을 의미 하니까.. 위에서 말한 스트림과는
다른 의미이지 않을까 싶네요..
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
다른 언어는 모르겠지만 자바에서 java.io.*Stream 클래스들은 데이터를 연속적인 흐름으로 읽어오고 처리하기 위해서 필요합니다. 한번에 스트링이나 바이트 배열로 읽지 않고 흐름으로 처리하는 이유는 무엇보다 효율적인 메모리의 사용입니다.
예를들어 웹어플리케이션을 만드는데 업로드 기능을 구현한다고 생각할 때, 브라우저에서 byte[]로 받아서 이를 파일로 저장한다면 10명의 사용자가 동시에 100메가 파일을 업로드하면 그 것만으로도 거의 1기가에 가까운 메모리를 차지합니다. 반면에 바이트를 스트림으로 읽어서 읽어온 만큼 그 때 그 때 파일 스트림에 써주면 그런 문제가 생기지 않는다는 뜻입니다.
스트림을 사용하는 이유는 위와 같고, 네트워크에서 데이터를 스트림 형식으로 처리할 수 밖에 없는 이유는 윗분의 설명이 정확한 것 같습니다.
---------------------------- [서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...
예들들어 소켓에서 10바이트를 읽었다고 하면,
그걸로 그 데이터는 끝입니다. 그 데이터를 카피해놓지 않았다면 어디에도 없죠.
다시 10바이트를 읽어들인다면 그 뒤에 있는 내용이 들어올뿐
처음에 읽었던 10바이트는 아니죠.
데이터를 앞으로 건너뛸 수는 있어도 뒤로 되돌아 갈 수는 없습니다.
하지만 스트링은 앞,뒤로 이동이 가능하죠.
'Stirng'이라는 문장에서 g를 읽어들일 수도 있고, S를 읽어들일 수도 있습니다.
다시한번 정리하자면
스트링은 앞뒤 이동이 가능한구조
스트림은 앞으로만 이동이 가능한구조.
가 아닐까요? ^^;
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
- String : 문자열을 처리하기 위함, 특정 프로그램언어나 인코딩, 또는 운영체제에의 정의에 따라 틀리나, 보통 정적이며 고정사이즈를 가짐. 소량의 입출력이 일어나는 제한적 처리루틴에 적합하며, 거대 데이터 처리에는 적합하지 않음; 특히, 통신상의 데이터전송등에는 매우 부적합한 형태임
* 스트림은 데이터그램과 비교함이 옳습니다.
- Stream : 데이터를 연속적으로 처리(IO)하는데 적합, 예를 들어 통신장치의 경우 일정사이즈 단위(여기서 패킷이라고 하면)로 데이터 송수신이 일어나는 경우가 있다. 이를 스트림화 하면 이를 사용하는 프로그래머는 패킷단위에 대해서는 몰라도 되며, 입력 또는 출력되는 모든 값들이 데이터의 연속적 흐름으로 보고 프로그래밍 하면 된다.; 예를들어 VOD, 파일전송등 거대 데이터 처리에 적합;만일 스트림으로 채팅을 만들려면 스트림의 중간중간에 구분자 및 타이밍을 주어야하므로 고생좀 해야겠지요?
- Datagram : 데이터를 일정 크기로 나누어 처리하는데 적합; 이를 테면, 채팅등 interactive한 응용에 적합; 만일 데이터그램으로 파일전송을 만들려면 고생(노력)이 스트림에 비해 좀더 들어가야겠지요?
제 생각입니다만... 도움이 될런지 모르겠네요.
잘은 모르겠지만.. 네트워크 상에서 스트링이라고 하지 않는 이유는...
네트워크에서 지나다니는 실질적인 데이터는 0과 1의 전기적으로 연속된
신호이기 때문에 비트 스트림이라고 한다고 생각하는데요..
스트링은 연속된 문자.. 즉 문자열을 의미 하니까.. 위에서 말한 스트림과는
다른 의미이지 않을까 싶네요..
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
다른 언어는 모르겠지만 자바에서 java.io.*Stream 클래스들은
다른 언어는 모르겠지만 자바에서 java.io.*Stream 클래스들은 데이터를 연속적인 흐름으로 읽어오고 처리하기 위해서 필요합니다. 한번에 스트링이나 바이트 배열로 읽지 않고 흐름으로 처리하는 이유는 무엇보다 효율적인 메모리의 사용입니다.
예를들어 웹어플리케이션을 만드는데 업로드 기능을 구현한다고 생각할 때, 브라우저에서 byte[]로 받아서 이를 파일로 저장한다면 10명의 사용자가 동시에 100메가 파일을 업로드하면 그 것만으로도 거의 1기가에 가까운 메모리를 차지합니다. 반면에 바이트를 스트림으로 읽어서 읽어온 만큼 그 때 그 때 파일 스트림에 써주면 그런 문제가 생기지 않는다는 뜻입니다.
스트림을 사용하는 이유는 위와 같고, 네트워크에서 데이터를 스트림 형식으로 처리할 수 밖에 없는 이유는 윗분의 설명이 정확한 것 같습니다.
----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...
저는..
제생각엔 스트링이란 오직 문자열을 의미하고
스트림이란 문자와 숫자의 조합을 의미하는것같습니다.
다시말해 숫자의 의미와 문자의 의미가 함께 공존할수있는 형태
(C언어에서는 그게 가능하게 하기위해 공용체를 쓰죠)
그런 조합이 스트림이라고 생각합니다.
스트링의 예
'S', 'T','A','R','T','1','2','3'
숫자가있지만. 그것은 문자취급
스트림의 예
'L', 0,'V', 2,'F',3,4,4
이런식으로 숫자와 문자가 공존하는거겠죵?
참. 단지 공존하는게 아니라. 길게 스트링처럼 늘여뜨려진 그런것의 조합이겠죠?
네트웍에서는 비트스트림으로 읽겠지만. 그것이 의미있는 단어로 단지 특정형태를(숫자또는 문자)
만 띄는 그런게 아니기때문에 제가 정의하라하면 조합된 패턴을 스트림이라고 할수있을꺼같습니다.
------------------------------------
F/OSS bless you... ^^*
저도 정확히는 모르지만 ㅡㅡ;;
스트림은 말그대로 '흘러가는'데이터 아닌가요?
예들들어 소켓에서 10바이트를 읽었다고 하면,
그걸로 그 데이터는 끝입니다. 그 데이터를 카피해놓지 않았다면 어디에도 없죠.
다시 10바이트를 읽어들인다면 그 뒤에 있는 내용이 들어올뿐
처음에 읽었던 10바이트는 아니죠.
데이터를 앞으로 건너뛸 수는 있어도 뒤로 되돌아 갈 수는 없습니다.
하지만 스트링은 앞,뒤로 이동이 가능하죠.
'Stirng'이라는 문장에서 g를 읽어들일 수도 있고, S를 읽어들일 수도 있습니다.
다시한번 정리하자면
스트링은 앞뒤 이동이 가능한구조
스트림은 앞으로만 이동이 가능한구조.
가 아닐까요? ^^;
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
그리고.. string은 '\0'으로 끝나지만 stream은 아니죠.
그리고.. string은 '\0'으로 끝나지만 stream은 아니죠.
[quote="cdpark"]그리고.. string은 '\0'으로 끝나지
null-terminated string에서는 맞는 얘기지만 모든 문자열이 null-terminated인 것은 아니지요. (예: C++의 std::basic_string, MFC의 CString)
[quote="musiphil"][quote="cdpark"]그리고..
위에 분의 의도는 정확하게 끝을 알수 있다는 것 같습니다.
저도 공감합니다.
-- 아쉬운 하루 되세요 --
Re: [질문.개념정의] 언어에서 string과 stream의 차이는?
* 일단 스트링과 스트림을 비교하는 것은 옳지 않습니다.
- String : 문자열을 처리하기 위함, 특정 프로그램언어나 인코딩, 또는 운영체제에의 정의에 따라 틀리나, 보통 정적이며 고정사이즈를 가짐. 소량의 입출력이 일어나는 제한적 처리루틴에 적합하며, 거대 데이터 처리에는 적합하지 않음; 특히, 통신상의 데이터전송등에는 매우 부적합한 형태임
* 스트림은 데이터그램과 비교함이 옳습니다.
- Stream : 데이터를 연속적으로 처리(IO)하는데 적합, 예를 들어 통신장치의 경우 일정사이즈 단위(여기서 패킷이라고 하면)로 데이터 송수신이 일어나는 경우가 있다. 이를 스트림화 하면 이를 사용하는 프로그래머는 패킷단위에 대해서는 몰라도 되며, 입력 또는 출력되는 모든 값들이 데이터의 연속적 흐름으로 보고 프로그래밍 하면 된다.; 예를들어 VOD, 파일전송등 거대 데이터 처리에 적합;만일 스트림으로 채팅을 만들려면 스트림의 중간중간에 구분자 및 타이밍을 주어야하므로 고생좀 해야겠지요?
- Datagram : 데이터를 일정 크기로 나누어 처리하는데 적합; 이를 테면, 채팅등 interactive한 응용에 적합; 만일 데이터그램으로 파일전송을 만들려면 고생(노력)이 스트림에 비해 좀더 들어가야겠지요?
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기