[완료] Java에서 Stream의 개념이 무엇인가요?

uviczz의 이미지

Java로 구현된 TCP/IP 소켓 통신 코드를 보면,,
InputStream, OutputStream과 관련된 함수들이 net, io 관련 클래스의 멤버함수로
구현이 되어 있었습니다.

일반적으로 소켓 통신 코드에서 send(), recv() 함수들이 등장할 것으로 예상했었는데..

Stream에 관한 정보를 얻어와서 read, write을 수행하거나,,
다른 다양한 멤버함수들이 사용이 되던데..

Java에서 구현된 소켓 통신 관련된 클래스에서는
리눅스 기반 C언어 소켓과 어떤 차이점을 가지는지요?
Stream이라는 용어가 원래 그 Stream이 가지는 의미를 반영하고 있는 듯한데..
어떤 형태로 쓰이는 건가요?

답변 부탁드리고, 좋은 저녁 되십시오^^

dormael의 이미지

스트림은 소켓 통신뿐 아니라 파일, 파이프 등등의 곳에서 순차적인(직렬화된?) 데이터를 읽고 쓸 수 있도록 만든 추상화된 객체...

라고 보면 되지 않을까요?

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

codepage의 이미지

JAVA에서의 Stream의 개념은
'모든 I/O를 할때는 기본적으로 Strem을 통해서 하는 것이다.' 라고 보면 됩니다.

즉 Streem Object를 Socket이던 file이던 접근하고자 하는 리소스에 대하여 연 다음
거기에가다 데이타를 읽고 쓰고 할 수 있습니다.
읽고자 할때는 거기에 맞는 용도에 맞는 XXXInputStrem을 쓰시면 될 거구요
쓰고자 할때는 XXXOutputStream을 쓰면 됩니다.

InputStream만 보더라도
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream, BufferedInputStream,DataInputStream 등등이 있고요
(물론 여기에 해당하는 OutputStream들도 존재)

경우에 따라서는 자기가 원하는 Stream class들은 만들어 쓸수도 있습니다.

gamdora의 이미지

*NIX의 파일 기술자와 비슷한 개념인가요?

cleol의 이미지

네, 공통적인 입출력 인터페이스를 제공한다는 측면에서는 파일 기술자와 비슷한 개념입니다. 다만 자바 OOP 스타일에 맞도록 구현되어 있고, 파일 기술자가 장치에 대한 추상화라는 측면이 강한 반면에 자바의 Stream 은 순차적으로 읽고 쓰는 방식에 대한 추상화라는 측면이 더 강합니다.

uviczz의 이미지

답변 감사드립니다..
그런데 제가 Java에 대해서 잘 몰라서 그런데..
Stream class를 만들어 쓴다는 것에 대해서 조금 더 자세히 설명해 주실 수 있으신가요?

Stream을 처리하는 어떤 타입/포맷이 있을 것 같은데..

cleol의 이미지

Stream 클래스를 만들어 쓴다는 것은, 추상 클래스인 InputStream/OutputStream 클래스를 상속해서 (concrete) 클래스를 만든다는 뜻입니다. codepage 님이 예로 들어주신 클래스들도 모두 InputStream 을 확장해서 만든 클래스들입니다. 즉, int read()/write(int) 메소드를 제공하는 것이 InputStream/OutputStream 의 핵심이라고 할 수 있는거지요.

uviczz의 이미지

감사합니다(__)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.