입출력을 편리하게 하기 위한 유틸리티(utility)

클래스가 존재한다. 

         System.IO.StreamReader : text파일 읽기
        System.IO.StreamWriter : text파일 쓰기
        System.IO.BinaryReader : 이진파일 읽기
        System.IO.BinaryWriter  : 이진파일 쓰기 

외부적으로는 ReadLine, WriteLine등의 메소드를 지원하여 편리한 프로그래밍이 가능한다.

문자열을 바이트와 매칭시키는 방법에 따라 유니코드의 사용,

ASCII 코드의 사용 등으로 바뀐다.

 

즉 같은 바이트 배열이라도 다른 문자열이 될 수 있는 것이다.
스트림을 읽고 쓰기 위해서는 코드변환 즉 인코딩이 필요하다.

아래의 예는 str 스트링을 UTF8, ASCII,

시스템디폴트로 각각 인코딩 하여 바이트 배열로 바꾸는

코드이다.

Byte [] b = Encoding.UTF8.GetBytes(str);
Byte [] b = Encoding.ASCII.GetBytes(str);
Byte [] b = Encoding.Default.GetBytes(str);​

 

 

Flush() 메소드 

스트림에 출력해도 바로 파일에 쓰여지는 것은 아니다.

메모리 상에 버퍼되어 있는 경우가 많다. 이때 프로그램의 수행을 중단해 버리면 원하는 출력값을 얻을 수 없다. 

따라서, 버퍼된 바이트를 모두 출력하여 버퍼를 비우라는 것을

명시하는 메소드이다. 

Close() 메소드 

Flush하고, 점유하고 있던 자원을 반환한다. (파일의 경우 파일 닫기) Close하지 않는 경우, 제대로 출력되지 않는 현상이 발생한다.

 

 

Write(Byte[] array, int offset, int count);

        쓰기 메소드
        array 바이트 배열을 offset 번째 바이트 부터

        count   바이트만큼 write하라는 명령

예) fileStream.Write(new Byte[3]{1,2,3}, 0, 3) 

결과) fileStream 스트림에 123을 출력한다. 

Read(Byte[] array, int offset, int count);
       Write와 동일 

 

데이터를 연속적으로 흘려 보내거나, 흘러나오는 객체

 

파일 스트림, 네트웍 스트림 등이 존재. 

 

System.IO.Stream 클래스에서 파생되며, BufferedStream, FileStream 등의 클래스를 사용할 수 있다. 

 

스트림을 통과하는 데이터는 바이트 배열을 사용한다.
예) Byte [] b = new Byte[10]; // 10 byte 짜리 배열 

 

 

CLS를 준수하는 C#의 모든 형식은 객체다. 단순한 형식(int, double) 들도 모두 객체의 틀을 입혀놓았다.

하지만 객체의 틀을 입히는 것은 메모리 사용과 연산의 양을 증가시킨다.

따라서 C#에서는 객체에 대한
 참조형식<->값형식  변환을 지원하게 되었다.
 그리고 이런 변환은 참조형식, 값형식 모두 같은 모양으로 보이게 한다.

 (Unified view)
                   박싱:  값형식->참조형식
                   언박싱: 값형식<-참조형식

 

 

(오브젝트) as (클래스나 인터페이스)​

호환성 테스트 후 형 변환까지 하는 연산자이며,
호환될 경우 형변환 결과를 반환, 호환되지 않을 경우 null을 반환한다.

b = a as Car ?  a가 Car 클래스로 캐스팅될 수 있으면 b=(Car) a, 캐스팅이 불가능하면 b=null

a as B  (a is B)? (B)a : null

업캐스팅 예제 (0) 부분에 다음을 삽입해 보면,
         sonata = boxter as Car  sonata = (Car) boxter

 

 

오브젝트) is (클래스나 인터페이스)

호환성 테스트 연산자이며, true / false 를 반환한다.

a is Car ?  a가 Car 클래스로 캐스팅될 수 있는가? 의 의미이다.

업캐스팅 예제 (0) 부분에 다음을 질의해 보면,

             sonata is Car  // true
             sonata is SportsCar // false
             boxter is Car  // true
             boxter is SportsCar // true
 

 

+ Recent posts