iostream 상속객체 구현 조언해주세요.
글쓴이: purewell / 작성시간: 화, 2005/08/30 - 1:37오전
iostream 객체를 가지고 있으면
실제 인스턴스가 fstream이든 stringstream이든 상관 없습니다.
(oop니 당연한거지만)
문제는 다음과 같은 상황을 C++ 표준 객체인 iostream 따위를
상속해서 구현하고 싶습니다. 그런데 막상 자료가 충분치 않습니다.
구현하고자 하는 내용.
상속 받은 객체가 각각 zistream, zostream, ziostream일 때,
zistream zis; zis.open("압축된파일.gz"); if (!zis.is_open()) return false; ofstream ofs; ofs.open("평문파일.txt"); if (!ofs.is_open()) return false; char buf[1024]; while (!zis.eof()) { zis.read(buf, sizeof(buf)); // 물론 읽은 데이터 크기가 버퍼크기가 아닐 수도 있지만 대충대충 skip~ ofs.write(buf, sizeof(buf)); } ...
Forums:
[code:1]class zistream : public std&
[quote="doldori"][code:1]class zistream
ㅡ_-);; read/write 구현은요? 그냥 read/write virtual로 구현해야하나요?
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
read/write는 ifstream/ofstream 클래스에 있으니 그
read/write는 ifstream/ofstream 클래스에 있으니 그냥 쓰면 되는데요?
뭔가 특별한 기능을 원하시는 건가요?
[quote="doldori"]read/write는 ifstream/of
네.
z*stream은 gzip으로 압축된 파일에서
내용을 읽고 쓰기 위해 만드려는 클래스입니다.
그러므로 read/write할 때 파일에 그냥 쓰는게 아니라
압축알고리즘에 의해 압축/해제가 이뤄져야합니다.
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
iostream의 대부분의 class는 상속받아서 쓸 수 있도록 desi
iostream의 대부분의 class는 상속받아서 쓸 수 있도록 design된 class들이 아닙니다. 자세한 것은 Standard C++ IOStreams and Locales을 참고하시기 바랍니다. 읽은 지 오래되서 어설픈 설명을 하는 것보다, 책 추천이 나을 듯 싶군요.
:wink:
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
저라면...
저라면... iostream 객체를 상속받지않고...
객체안에 참조로 iostream 을 가지도록 감싸겠습니다.
int zistream::read() {
return decompress(iostr->read());
}
등등...
위의 예제 코드만 실행 되게 위해서는 read()만 override해서
위의 예제 코드만 실행 되게 위해서는 read()만 override해서 눈가림식으로만들수도 있지만, 표준 stream의 조건을 만족하기 위해서는 std::streambuf을 상속받은 zistreambuf을 구현하고 이것을 rdbuf로 사용하는 zistream(istream을 상속받아서..)을 구현해야 될 것 같습니다.
stream 클래스 들은 거의 특정 streambuf 를 랩핑해서 IO를 위한 인터페이스를 제공하는 역할을 하므로. zistreambuf만 잘 구현하면 zistream에 작성해야 될 부분은 몇줄 안될 것 같습니다.
열심히 설명하고 나서 찾아봤더니 벌서 구현된 것이 있군요. :oops:
열심히 설명하고 나서 찾아봤더니 벌서 구현된 것이 있군요. :oops:
http://www.zlib.net/
zlib 소스를 받아보시면 contrib/iostream/ 에 들어있습니다.
[quote="prolinko"]위의 예제 코드만 실행 되게 위해서는 r
켜~
윗분들 모두모두
감사합니다.
댓글 달기