GnuSmalltalkUsersGuide:BaseChapter 154

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Stream

Stream

네임스페이스 Smalltalk에 정의됨

슈퍼클래스: Iterable

범주: 스트림


나는 추상 클래스로서, 객체에 대해 인터럽트 가능한 순차 접근을 제공한다. 나는 소스로부터 연속적 객체를 리턴하거나, 연속 객체를 허용하여 순차적으로 sink에 보관할 수 있다. 나의 인스턴스들 중 하나의 내용에 단순한 반복을 제공하고, 컬렉션을 순차적으로 작성하도록 제공한다.


Stream: 접근하기-읽기

contents

다음 객체부터 마지막 객체까지 수신자의 전체 내용을 응답하라.

file

기본적으로 nil을 리턴하라; 모든 스트림이 파일을 갖는 것은 아니다.

name

기본적으로 nil을 리턴하라; 모든 스트림이 이름을 갖는 것은 아니다.

next

수신자 내에 다음 객체를 리턴하라.

next: anInteger

수신자 내에 다음 anInteger 객체를 리턴하라.

nextAvailable: anInteger

수신자 내에 anInteger 객체까지 리턴하라. 이런 경우, 스트림의 끝에 도달했을 때 중단하는 것 외에도 다양한 이유로 인해 이보다 적은 바이트 수를 리턴할지도 모른다. 가령, 파일이나 소켓에서 이러한 연산은 non-blocking이 될 수도 있고, 기껏해야 하나의 I/O 연산을 실행하는 데 그칠 수도 있다.

nextAvailable: anInteger into: aCollection startingAt: pos

pos 위치부터 시작해 수신자로부터 다음 anInteger 객체를 aCollection으로 위치시켜라. 보관된 항목 수를 리턴하라. 이런 경우, 스트림의 끝에 도달했을 때 중단하는 것 외에도 다양한 이유로 인해 이보다 적은 바이트 수를 리턴할지도 모른다. 가령, 파일이나 소켓에서 이러한 연산은 non-blocking이 될 수도 있고, 기껏해야 하나의 I/O 연산을 실행하는 데 그칠 수도 있다.

nextAvailable: anInteger putAllOn: aStream

수신자 내의 anInteger 객체까지 aStream로 복사하라. 이런 경우, 스트림의 끝에 도달했을 때 중단하는 것 외에도 다양한 이유로 인해 이보다 적은 바이트 수를 리턴할지도 모른다. 가령, 파일이나 소켓에서 이러한 연산은 non-blocking이 될 수도 있고, 기껏해야 하나의 I/O 연산을 실행하는 데 그칠 수도 있다.

nextLine

다음 행부터 다음 새행 문자까지 포함해 스트림이 접근하는 것과 같은 타입의 컬렉션을 리턴한다. 새행 문자를 찾을 수 없다면 스트림 내용의 나머지를 리턴한다.

nextMatchFor: anObject

다음 객체가 anObject와 같은지 응답하라. 같지 않다 하더라도 anObject는 손실된다.

splitAt: anObject

수신자의 부분 중에서 OrderedCollection를 응답하라. 새로운 (어쩌면 비어 있는) 부분은 수신자의 시작부터 시작되거나, anObject와 같은 (#=로 비교하여) 객체의 발생 다음마다 시작된다.

upTo: anObject

anObject는 제외하되 anObject까지 스트림이 접근하는 것과 같은 타입의 컬렉션을 리턴한다. anObject가 존재하지 않는 경우 스트림의 내용 나머지를 모두 리턴한다.

upToAll: aCollection

aCollection에서와 같은 객체의 시퀀스가 스트림에 남아 있다면 스트림 위치를 해당 시퀀스 바로 다음으로 설정하고 해당 시퀀스는 포함하지 않되 그 시퀀스까지만 요소들을 응답하라. 그렇지 않은 경우, 스트림 위치를 그 끝으로 설정하고 남은 모든 요소들을 응답하라.

upToEnd

next부터 last까지 수신자가 스트리밍하는 컬렉션 내 모든 항목을 응답하라.


Stream: 접근하기-쓰기

next: anInteger put: anObject

anObject의 anInteger 복사본을 수신자에게 작성하라.

next: n putAll: aCollection startingAt: start

start번째 항목부터 시작해 aCollection으로부터 읽어온 n개 객체를 스트림에 작성하라.

nextPut: anObject

anObject를 수신자에게 작성하라.

nextPutAll: aCollection

aCollection 내 모든 객체를 수신자에게 작성하라.

nextPutAllFlush: aCollection

aCollection의 모든 요소를 스트림에 넣고, 스트림이 지원하는 경우 버퍼를 flush하라.


Stream: 기본

species

'Array'를 응답하라.


Stream: 버퍼링

next: anInteger into: answer startingAt: pos

스트림으로부터 anInteger 바이트까지 읽고 응답에 보관하라. 읽힌 바이트 수를 리턴하고, 데이터의 전체량을 읽을 수 없는 경우 예외를 발생시켜라.

next: anInteger putAllOn: aStream

스트림으로부터 anInteger 바이트까지 읽고 aStream에 보관하라. 읽힌 바이트 수를 리턴하고, 데이터의 전체량을 읽을 수 없는 경우 예외를 발생시켜라.


Stream: built-ins

fileIn

수신자의 내용을 file in하라. 파일이 작동 중인 동안에는 아직 선언되지 않은 전역 변수는 (대문자로 시작) '알려지지 않은 변수' 오류를 발생시키지 않는다. 대신 'Undeclared' dictionary(스몰토크에 상주하는 전역 변수)에 nil로 정의된다. 변수를 네임스페이스로 추가하는 즉시(예: 클래스를 생성함으로써) Association이 Undeclared로부터 제거되고 네임스페이스 재사용되어 오래된 참조가 자동으로 새 값을 가리킬 것이다.

fileInLine: lineNum file: aFile at: charPosInt

Private - 프로세서 #line 지시어와 많이 비슷하다; 내부적으로 -#fileIn에 의해 사용되며, 명시적으로는 Emacs Smalltalk 모드에 의해 사용된다.

fileInLine: lineNum fileName: aString at: charPosInt

Private - 프로세서 #line 지시어와 많이 비슷하다; 내부적으로 -#fileIn에 의해 사용되며, 명시적으로는 Emacs Smalltalk 모드에 의해 사용된다.


Stream: 문자 작성하기

cr

cr을 수신자 상에 보관하라.

crTab

cr과 tab을 수신자 상에 보관하라.

encoding

Unicode 문자를 보관 시 사용될 인코딩을 응답하라.

isUnicode

수신자가 Unicode 문자를 보관할 수 있는지 여부를 응답하라. 해당 모드가 true를 리턴할 경우 스트림은 (UnicodeCharacters와 반대로) 값이 127 이상인 Characters를 보관할 수도, 보관할 수 없을지도 모른다.

nl

새 행을 수신자 상에 보관하라.

nlTab

새 행과 탭을 수신자 상에 보관하라.

space

공백(space)을 수신자 상에 보관하라.

space: n

n개 공백을 수신자 상에 보관하라.

tab

탭을 수신자 상에 보관하라.

tab: n

n개 탭을 수신자 상에 보관하라.


Stream: 연결하기(concatenating)

with: aStream

수신자에게서 취한 요소 하나와 aStream으로부터 취한 요소 하나를 포함하는 2-요소 Arrays를 요소로 가진 새 Stream을 리턴하라.

with: stream1 with: stream2

수신자에게서 취한 요소 하나와 각 인자로부터 하나씩 취한 요소를 포함하는 3-요소 Arrays를 요소로 가진 새 Stream을 리턴하라.

with: stream1 with: stream2 with: stream3

수신자에게서 취한 요소 하나와 각 인자로부터 하나씩 취한 요소를 포함하는 3-요소 Arrays를 요소로 가진 새 Stream을 리턴하라.


Stream: 열거하기

do: aBlock

수신자 내 모든 객체마다 aBlock을 한 번씩 평가하라.

linesDo: aBlock

수신자 내 모든 행마다 aBlock을 한 번씩 평가하라 (수신자가 Characters를 스트리밍하고 있다고 가정).


Stream: file out하기

fileOut: aClass

수신자 상에 aClass를 file out하라. aClass가 메타클래스가 아닌 경우 클래스와 인스턴스 메서드를 file out하라; aClass가 메타클래스인 경우 클래스 메서드만 file out하라.


Stream: 필터링하기

, aStream

수신자 내 데이터와 aStream 내 데이터를 연결하는 새 스트림을 응답하라. 수신자와 aStream 모두 읽기 가능해야 한다.

collect: aBlock

리턴된 객체를 aBlock을 통해 전달할 새 스트림을 응답하고, aBlock이 리턴하는 객체가 무엇이든 대신 리턴하라. 리턴된 스트림을 들여다볼 때 블록이 여러 번 호출되어 놀라운 결과가 발생할 수도 있음을 주목하라.

lines

수신자로부터 행을 응답하는 새 스트림을 응답하라.

peek

포인터를 이동시키지 않고 스트림의 다음 요소를 리턴한다. 스트림 끝에 있을 경우 nil을 리턴한다. 위치지정(positionable)은 불가능하나 복사가 가능한 스트림에 대해 자동으로 미리보기(lookahead)가 실행될 것이다.

peekFor: aCharacter

스트림으로부터 다음 요소가 anObject와 같을 경우 true를 리턴하고 해당 요소를 gobble하며, 다음 요소가 anObject와 같지 않을 경우 false를 리턴하고 다음 요소를 gobble하지 않는다. 위치지정(positionable)은 불가능하나 복사가 가능한 스트림에 대해 자동으로 미리보기(lookahead)가 실행될 것이다.

reject: aBlock

aBlock이 false를 리턴하는 객체만 리턴하는 새 스트림을 응답하라. 리턴된 스트림은 위치 지정이 불가능할 것이다.

select: aBlock

aBlock이 true를 리턴하는 객체만 리턴하는 새 스트림을 응답하라. 리턴된 스트림은 위치 지정이 불가능할 것이다.


Stream: 다형성

close

아무 일도 하지 않는다. 파일 스트림과의 일관성을 위해 제공되었다.

flush

아무 일도 하지 않는다. 파일 스트림과의 일관성을 위해 제공되었다.

pastEnd

스트림의 끝에 도달하였다. Notification을 시그널링하라.


Stream: 위치지정하기

isPositionable

스트림이 #skip: 을 이용한 뒤로 이동을 지원할 경우 true를 응답하라.

skip: anInteger

anInteger place만큼 위치를 앞(forward)으로 이동시켜라.

skipSeparators

구분자가 아닌 문자를 찾을 때까지 수신자를 앞으로 이동시켜라(advance). 스트림 끝에 도달하면 false를 응답하고, 그 외의 경우 true를 응답하라; 이번 사례에서 #next를 전송하면 첫 비구분자 문자를 리턴할 것이다 (#skipSeperators가 전송되기 전에 스트림이 가리키는 문자와 같을지도 모른다).

skipTo: anObject

현재 위치를 anObject의 다음 발생 이후로 이동시키고, anObject가 발견되면 true를 리턴하라. anObject가 존재하지 않는 경우, 포인터는 atEnd이고 false가 리턴된다.

skipToAll: aCollection

스트림 내에 남은 객체들의 시퀀스가 aCollection 내의 시퀀스와 같은 경우, 스트림 위치를 해당 시퀀스 바로 다음으로 설정하고 true를 응답하라. 그 외의 경우 스트림 위치를 끝으로 설정하고 false를 응답하라.


Stream: 인쇄하기

<< anObject

해당 메서드는 #display:의 단축키이다; 이는 displayOn: 을 anObject로 전송함으로써 수신자 상에 anObject를 인쇄한다. 해당 메서드는 cascading을 사용하고 더 나은 모양의 코드를 얻을 수 있도록 하기 위해 제공된다.

display: anObject

anObject에게 displayOn:을 전송함으로써 수신자 상에 anObject를 인쇄한다. 해당 메서드는 cascading을 사용하고 더 나은 모양의 코드를 얻을 수 있도록 하기 위해 제공된다.

print: anObject

anObject에게 printOn:을 전송함으로써 수신자 상에 anObject를 인쇄한다. 해당 메서드는 cascading을 사용하고 더 나은 모양의 코드를 얻을 수 있도록 하기 위해 제공된다.


Stream: 아직 분류되지 않음

nextPutAllOn: aStream

수신자 내 모든 객체를 aStream에게 작성하라.


Stream: 보관하기

store: anObject

anObject로 storeOn:을 전송함으로써 anObject로 컴파일하는 스몰토크 코드를 수신자 상에 인쇄하라. 해당 메서드는 cascading을 사용하고 더 나은 모양의 코드를 얻을 수 있도록 하기 위해 제공된다.


Stream: 스트리밍 프로토콜

nextAvailablePutAllOn: aStream

다소 임의의 데이터량을 aStream으로 복사하라. 파일에서 사용할 때는 기껏해야 하나의 I/O 연산을 실행한다. 다른 종류의 스트림의 경우 정의가 매우 다양할 수 있다. 해당 메서드는 stream-to-stream(스트림에서 스트림으로) 복사를 실행하는 데 사용된다.


Stream: 검사하기

atEnd

스트림이 끝에 도달했는지 응답하라.

isExternalStream

수신자가 파일이나 소켓을 스트리밍하는지 응답하라. 기본적으로 false를 응답한다.

isSequenceable

#at:/-#at:put:를 이용해 수치 색인이 수신자를 접근 가능한지 응답하라.

readStream

대충 짐작하건대, 수신자를 리턴한다. WriteStreams는 해당 메서드를 오버라이드해야 한다.


Notes