본문 바로가기

   
Programming/C#

스트림, 인코딩

반응형

스트림(Stream)

       - 파일 읽기, 쓰기 : 텍스트 파일

       - 프로그램을 기준으로 내부에서 외부, 외부에서 내부로 데이터가 이동될때 데이터의 단위

       - 데이터 흐름

       - C#에서의 모든 입출력 단위

 

인코딩

       - 문자 코드를 0 1의 바이너리값을 가지는 연속된 비트 형태로 매핑시키는 작업

       - 디코딩 : 인코딩 반대작업, 복원화

 

       - ASCII : 7비트 사용, 128문자 표현

       - ISO-8859-1 : 8비트 사용, 서유럽 문자 집합, 256문자 표현

       - KS C 5601 : 한국 공업 표준, 2바이트 완성형 한글 표현, ASCII 제외

       - EUC-KR : ASCII 문자코드 1바이트, 한글 2바이트

       - Unicode : 2바이트 문자 코드 체계

       - UTF-8 : ASCII 문자코드 1바이트, 다른 문자 2바이트 이상(한글 3바이트), 닷넷 기본 인코딩 방식

       - UTF-16 : 모든 문자코드 2바이트

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;//

 

namespace ConsoleEx

{

       //Ex117_Stream.cs

       class Ex117_Stream

       {

             static void Main(string[] args)

             {

                    M1();

             }

 

             private static void M1()

             {

                    //파일에 쓰기

                    //1. FileInfo 객체 생성하기

                    // - 현재 실행파일과 동일한 폴더의 memo.txt

                    FileInfo file = new FileInfo(@"D:\김종현\memo.txt");

 

                    //D:\[01]CSharp\ConsoleEx\bin\Debug\memo.txt

                    //Console.WriteLine(file.FullName);

 

 

                    //2. 해당 파일에 읽거나 쓸수있는 스트림 열기

                    // - CreateText()로 만든 StreamWirter는 해당 파일이 없으면 새로 생성함!!

                    // - CreateText()로 만든 StreamWriter는 해당 파일이 있어도 덮어쓰기!!

                    // - AppendText()로 만든 StreamWrite는 해당 파일이 있으면 이어쓰기!!

                    // - AppendText()로 만든 StreamWirter는 해당 파일이 없으면 새로 생성함!!

                    // - 파일 열기

                    //StreamWriter writer = file.CreateText();

                    StreamWriter writer = file.AppendText();

 

                    //3. 쓰기

                    // - 모든 입출력은 버퍼를 통해서 작업이 진행

                    //writer.Write();

                    //writer.WriteLine();

                    writer.WriteLine(DateTime.Now.ToString());

                    writer.WriteLine("안녕하세요~ 테스트입니다.");

 

                    //현재 출력버퍼에 쌓여있는 모든 내용을 실제파일 옮기고.. 버퍼를 비워라

                    //중간에 버퍼가 너무 쌓이면 버퍼를 비우는 용도

                    writer.Flush();

 

                    Console.ReadLine();

 

                    writer.WriteLine("추가 기록");

 

 

                    //4. 버퍼 -> 파일 옮겨적기

                    // - 파일 닫기

                    writer.Close();

 

                    //writer.WriteLine("추가 기록");

             }

       }

}

 



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

 

namespace ConsoleEx

{

       //Ex118_Stream.cs

       class Ex118_Stream

       {

             static void Main(string[] args)

             {

                    //M1();

                    //M2();

                    M3();

             }

 

             private static void M3()

             {

                    FileInfo file = new FileInfo(@"D:\김종현\김종현.txt");

                    if (file.Exists)

                    {

                           StreamReader reader = file.OpenText();

 

                           //읽은 데이터를 어딘가에 저장 -> 다시읽기

                           //1. 어딘가? -> 메모리 (배열) -> 속도 이득

                           //2. 메모리를 차지함(단점)

                           string temp = reader.ReadLine();

                           Console.WriteLine(reader.ReadLine());

                           Console.WriteLine(reader.ReadLine());

                           Console.WriteLine(temp);

                           reader.Close();

 

                           //다시 읽기 용도의 스트림을 생성

                           //1. 메모리 공간을 차지x

                           //2. 비용 발생(무거움)

                           reader = file.OpenText();

                           Console.WriteLine(reader.ReadLine());

 

                           //요구사항 하나를 다시 읽고 싶음 첫번째라면, 한번 읽었던 라인을 다시 읽고 싶음

                           //결과 불가능

                           //내부적:Stream 텍스트 내용 보다 윗 줄에 책갈피가있다.

                           //readLine 결과 -> 커서가 한칸 라인으로 내려가고 그다음부턴 알어서 한칸씩 내려간다.

                           //없는곳까지 가서 null을 반환한다.

                           //Stream 방식은 전진 방식 밖에 없다. 커서를 다시 위로 올리는건 불가능

                          

                           //★ 반드시 닫아 주도록 한다.

                           reader.Close();

                    }

             }

 


private static void M2()

             {

                    FileInfo file = new FileInfo(@"D:\김종현\김종현.txt");

                    if (file.Exists)

                    {

                           StreamReader reader = file.OpenText();

 

                           reader.ReadLine();

 

                           string data = reader.ReadToEnd();

 

                           Console.WriteLine(data);

                    }

             }

 


private static void M1()

             {

                    //읽기 - 파일이 없으면?

 

                    //1. 파일 객체 생성

                    FileInfo file = new FileInfo(@"D:\김종현\김종현.txt");

 

                    if (file.Exists)

                    {

                           //2. 스트림 생성 - 읽기 위한 용도

                           StreamReader reader = file.OpenText();

 

                           //3. 읽기

                           // - 텍스트파일의 한줄을 읽어서 string 반환

                           //string data = reader.ReadLine();

                           //Console.WriteLine(data);

 

                           //data = reader.ReadLine();//두번째 줄

                           //Console.WriteLine(data);

 

                           //data = reader.ReadLine();//세번째 줄

                           //Console.WriteLine(data);

 

                           //data = reader.ReadLine();//네번째 줄

                           //Console.WriteLine(data == null);

 

                           string data = "";

 

                           while ((data = reader.ReadLine()) != null)

                           {

                                 Console.WriteLine(data);

                           }

                    }

  }

}
}



반응형