[질문.개념정의] 언어에서 string과 stream의 차이는?

dummy999의 이미지

제가 아는 수준은 스트링은 문자열 스트림은 어떤 흐름을의미한다고 합니다.
뭐 네트웍에서 데이터들을 스트링이라고 안하던거같은데..
좀더 정확한 구분이 필요합니다.

가끔 일상에서 사소한것에대한 '왜'라는 질문이 나타나면. 더럭 겁이납니다.
대인기피증의 피해자.
:lol:

shs0917의 이미지

잘은 모르겠지만.. 네트워크 상에서 스트링이라고 하지 않는 이유는...
네트워크에서 지나다니는 실질적인 데이터는 0과 1의 전기적으로 연속된
신호이기 때문에 비트 스트림이라고 한다고 생각하는데요..
스트링은 연속된 문자.. 즉 문자열을 의미 하니까.. 위에서 말한 스트림과는
다른 의미이지 않을까 싶네요..

컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러

fender의 이미지

다른 언어는 모르겠지만 자바에서 java.io.*Stream 클래스들은 데이터를 연속적인 흐름으로 읽어오고 처리하기 위해서 필요합니다. 한번에 스트링이나 바이트 배열로 읽지 않고 흐름으로 처리하는 이유는 무엇보다 효율적인 메모리의 사용입니다.

예를들어 웹어플리케이션을 만드는데 업로드 기능을 구현한다고 생각할 때, 브라우저에서 byte[]로 받아서 이를 파일로 저장한다면 10명의 사용자가 동시에 100메가 파일을 업로드하면 그 것만으로도 거의 1기가에 가까운 메모리를 차지합니다. 반면에 바이트를 스트림으로 읽어서 읽어온 만큼 그 때 그 때 파일 스트림에 써주면 그런 문제가 생기지 않는다는 뜻입니다.

스트림을 사용하는 이유는 위와 같고, 네트워크에서 데이터를 스트림 형식으로 처리할 수 밖에 없는 이유는 윗분의 설명이 정확한 것 같습니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

dummy999의 이미지

제생각엔 스트링이란 오직 문자열을 의미하고
스트림이란 문자와 숫자의 조합을 의미하는것같습니다.
다시말해 숫자의 의미와 문자의 의미가 함께 공존할수있는 형태
(C언어에서는 그게 가능하게 하기위해 공용체를 쓰죠)

그런 조합이 스트림이라고 생각합니다.

스트링의 예
'S', 'T','A','R','T','1','2','3'

숫자가있지만. 그것은 문자취급

스트림의 예

'L', 0,'V', 2,'F',3,4,4
이런식으로 숫자와 문자가 공존하는거겠죵?

참. 단지 공존하는게 아니라. 길게 스트링처럼 늘여뜨려진 그런것의 조합이겠죠?

네트웍에서는 비트스트림으로 읽겠지만. 그것이 의미있는 단어로 단지 특정형태를(숫자또는 문자)
만 띄는 그런게 아니기때문에 제가 정의하라하면 조합된 패턴을 스트림이라고 할수있을꺼같습니다.

------------------------------------
F/OSS bless you... ^^*

kall의 이미지

스트림은 말그대로 '흘러가는'데이터 아닌가요?

예들들어 소켓에서 10바이트를 읽었다고 하면,
그걸로 그 데이터는 끝입니다. 그 데이터를 카피해놓지 않았다면 어디에도 없죠.
다시 10바이트를 읽어들인다면 그 뒤에 있는 내용이 들어올뿐
처음에 읽었던 10바이트는 아니죠.
데이터를 앞으로 건너뛸 수는 있어도 뒤로 되돌아 갈 수는 없습니다.

하지만 스트링은 앞,뒤로 이동이 가능하죠.
'Stirng'이라는 문장에서 g를 읽어들일 수도 있고, S를 읽어들일 수도 있습니다.

다시한번 정리하자면
스트링은 앞뒤 이동이 가능한구조
스트림은 앞으로만 이동이 가능한구조.
가 아닐까요? ^^;

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

cdpark의 이미지

그리고.. string은 '\0'으로 끝나지만 stream은 아니죠.

musiphil의 이미지

cdpark wrote:
그리고.. string은 '\0'으로 끝나지만 stream은 아니죠.

null-terminated string에서는 맞는 얘기지만 모든 문자열이 null-terminated인 것은 아니지요. (예: C++의 std::basic_string, MFC의 CString)
voider의 이미지

musiphil wrote:
cdpark wrote:
그리고.. string은 '\0'으로 끝나지만 stream은 아니죠.

null-terminated string에서는 맞는 얘기지만 모든 문자열이 null-terminated인 것은 아니지요. (예: C++의 std::basic_string, MFC의 CString)

위에 분의 의도는 정확하게 끝을 알수 있다는 것 같습니다.

저도 공감합니다.

-- 아쉬운 하루 되세요 --

mach의 이미지

dummy999 wrote:
제가 아는 수준은 스트링은 문자열 스트림은 어떤 흐름을의미한다고 합니다.
뭐 네트웍에서 데이터들을 스트링이라고 안하던거같은데..
좀더 정확한 구분이 필요합니다.

가끔 일상에서 사소한것에대한 '왜'라는 질문이 나타나면. 더럭 겁이납니다.
대인기피증의 피해자.
:lol:


* 일단 스트링과 스트림을 비교하는 것은 옳지 않습니다.

- String : 문자열을 처리하기 위함, 특정 프로그램언어나 인코딩, 또는 운영체제에의 정의에 따라 틀리나, 보통 정적이며 고정사이즈를 가짐. 소량의 입출력이 일어나는 제한적 처리루틴에 적합하며, 거대 데이터 처리에는 적합하지 않음; 특히, 통신상의 데이터전송등에는 매우 부적합한 형태임

* 스트림은 데이터그램과 비교함이 옳습니다.
- Stream : 데이터를 연속적으로 처리(IO)하는데 적합, 예를 들어 통신장치의 경우 일정사이즈 단위(여기서 패킷이라고 하면)로 데이터 송수신이 일어나는 경우가 있다. 이를 스트림화 하면 이를 사용하는 프로그래머는 패킷단위에 대해서는 몰라도 되며, 입력 또는 출력되는 모든 값들이 데이터의 연속적 흐름으로 보고 프로그래밍 하면 된다.; 예를들어 VOD, 파일전송등 거대 데이터 처리에 적합;만일 스트림으로 채팅을 만들려면 스트림의 중간중간에 구분자 및 타이밍을 주어야하므로 고생좀 해야겠지요?
- Datagram : 데이터를 일정 크기로 나누어 처리하는데 적합; 이를 테면, 채팅등 interactive한 응용에 적합; 만일 데이터그램으로 파일전송을 만들려면 고생(노력)이 스트림에 비해 좀더 들어가야겠지요?

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.