GnuSmalltalkUsersGuide:BaseChapter 130
- PositionableStream
PositionableStream
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: Stream
범주: 스트림-컬렉션
- 나의 인스턴스들은 명시적 위치지정이 허용되는 스트림을 나타낸다. 따라서 나의 스트림은 일반 디스크 파일에서와 같이 행위한다: 순차적으로 읽거나 쓸 수 있을 뿐만 아니라 당신이 어떤 장소를 선택할 때마다 파일을 위치시킨다. 일반적으로는 나를 대신해 ReadStream, WriteStream, ReadStream을 이용해 스트림을 생성하거나 사용하길 원할 것이다.
PositionableStream 클래스: 인스턴스 생성
on: aCollection
aCollection의 전체 내용에서 스트리밍하는 수신자의 인스턴스를 응답하라.
on: aCollection from: firstIndex to: lastIndex
aCollection의 firstIndex 번째 항목부터 lastIndex번째 항목까지 스트리밍하는 수신자의 인스턴스를 응답하라.
PositionableStream: 접근하기-읽기
close
보조기억장치(backing store)로부터 스트림을 연관해제(disassociate)하라.
contents
마지막 요소까지를 포함해 스트림이 접근하는 것과 같은 타입의 컬렉션을 리턴하라.
copyFrom: start to: end
start번째 항목부터 end번째 항목까지 수신자가 스트리밍하는 데이터를 응답하라. 해당 메서드는 Collection 내의 메서드와 달리 0부터 시작되는데, Stream의 #position 메서드가 0부터 시작되는 값을 리턴하기 때문이다.
next
수신자의 다음 항목을 응답하라. 스트림의 끝에 도달하면 nil을 리턴하라.
nextAvailable: anInteger into: aCollection startingAt: pos
수신자로부터 anInteger 객체를 aCollection으로 위치시키되, 컬렉션 내의 pos 위치부터 시작하고 더 이상 이용할 수 있는 데이터가 없다면 중단한다.
nextAvailable: anInteger putAllOn: aStream
수신자로부터 anInteger 객체를 aStream으로 복사하되, 더 이상 이용할 수 있는 데이터가 없다면 중단하라.
peek
포인터를 이동시키지 않고 스트림의 다음 요소를 리턴한다. 스트림의 끝에 도달하면 nil을 리턴한다.
peekFor: anObject
스트림으로부터 다음 요소가 anObject와 같은 경우 true를 리턴하고 gobble하고, 다음 요소가 anObject와 같지 않다면 false를 리턴하고 다음 요소를 gobble하지 않는다.
readStream
수신자와 같은 내용에 ReadStream을 응답하라.
reverseContents
마지막 요소까지 포함해 스트림이 접근하는 것과 같은 타입의 컬렉션을 리턴하되 역순으로 리턴한다.
PositionableStream: 클래스 타입 메서드
isExternalStream
우리는 이미지에 상주하는 컬렉션을 상대로 스트리밍하므로 false를 응답하라.
species
#upTo: 등의 메서드가 리턴하는 컬렉션의 타입을 리턴하되, 이러한 컬렉션은 #select: 와 같은 메서드가 있는 컬렉션이 리턴하는 것과 같은 유형이다.
PositionableStream: 컴파일하기
name
수신자가 스트리밍하는 대상을 나타내는 문자열을 응답하라.
segmentFrom: startPos to: endPos
#asString을 전송하면 수신자에게 'copyFrom: startPos to: endPos'를 전송하는 결과를 야기하게 될 객체를 응답하라.
PositionableStream: 위치지정하기
basicPosition: anInteger
스트림 포인터를 anInteger 번째 객체로 이동시켜라.
isPositionable
스트림이 #skip: 을 이용해 뒤로 이동을 지원할 경우 true를 응답하라.
position
스트림 포인터의 현재 값을 응답하라.
position: anInteger
스트림 포인터를 anIntegr번째 객체로 이동시켜라.
reset
스트림을 그 첫 번재 요소로 다시 이동시켜라. 쓰기만 가능한 스트림의 경우 스트림이 그 곳에서 절단된다(truncated).
setToEnd
현재 위치를 스트림 끝으로 이동시켜라.
size
우리가 스트리밍 중인 데이터의 크기를 응답하라.
skip: anInteger
현재 위치를 전방향이든 후방향이든 anInteger place만큼 이동시켜라.
PositionableStream: 아직 분류되지 않음
nextPutAllOn: aStream
수신자 내의 모든 객체를 aStream에 작성하라.
PositionableStream: 검사하기
atEnd
스트림 내의 모든 객체들이 끝에 도달했는지 응답하라.
basicAtEnd
스트림 내의 객체들이 끝에 도달했는지 응답하라. 해당 메서드는 오버라이드되어선 안 된다.
isEmpty
스트림이 객체를 전혀 갖고 있지 않은지를 응답하라.
PositionableStream: 절단하기(truncating)
truncate
수신자를 현재 위치로 절단하라 - 스트림 작성에만 유효.