... | @@ -129,7 +129,7 @@ class StringEx |
... | @@ -129,7 +129,7 @@ class StringEx |
|
|
|
|
|
string formatTxt = String.Format("A의 값은 {0}입니다. B의 값은 {1}이구요, 이 둘을 더한 값은 {2}입니다.", a, b, a + b);
|
|
string formatTxt = String.Format("A의 값은 {0}입니다. B의 값은 {1}이구요, 이 둘을 더한 값은 {2}입니다.", a, b, a + b);
|
|
Console.WriteLine(formatTxt);
|
|
Console.WriteLine(formatTxt);
|
|
formatTxt = String.Format("A의 값은 {0}입니다. B의 값은 {1}이구요, 이 둘을 더한 값은 {2}입니다. 뺀 값은 {3}입니다", a, b, a + b);
|
|
formatTxt = String.Format("A의 값은 {0}입니다. B의 값은 {1}이고,, 이 둘을 더한 값은 {2}입니다. 뺀 값은 {3}입니다", a, b, a + b);
|
|
//매개변수 개수보다 인덱스가 더 많으면 예외 발생.
|
|
//매개변수 개수보다 인덱스가 더 많으면 예외 발생.
|
|
|
|
|
|
//인덱스 [,정렬] [:형식] 순으로 지정한다.
|
|
//인덱스 [,정렬] [:형식] 순으로 지정한다.
|
... | @@ -169,7 +169,8 @@ class StringBuilderEx |
... | @@ -169,7 +169,8 @@ class StringBuilderEx |
|
st.Stop();
|
|
st.Stop();
|
|
Console.WriteLine("String으로 작업하는데 걸린 시간 : " + st.Elapsed); //18초 정도 걸린다.
|
|
Console.WriteLine("String으로 작업하는데 걸린 시간 : " + st.Elapsed); //18초 정도 걸린다.
|
|
|
|
|
|
StringBuilder sb = new StringBuilder(txt2); //StringBuilder 내에 일정한 메모리를 할당하고, txt2를 복사한다. 공간이 부족하면 공간을 2배로 할당한다.
|
|
StringBuilder sb = new StringBuilder(txt2);
|
|
|
|
//StringBuilder 내에 일정한 메모리를 할당하고, txt2를 복사한다. 공간이 부족하면 공간을 2배로 할당한다.
|
|
st.Start();
|
|
st.Start();
|
|
for( int i = 0; i < 300000; i++)
|
|
for( int i = 0; i < 300000; i++)
|
|
{
|
|
{
|
... | @@ -198,7 +199,8 @@ class TextEncodingEx |
... | @@ -198,7 +199,8 @@ class TextEncodingEx |
|
dataArray = new byte[fileStream.Length];
|
|
dataArray = new byte[fileStream.Length];
|
|
fileStream.Read(dataArray, 0, dataArray.Length);
|
|
fileStream.Read(dataArray, 0, dataArray.Length);
|
|
|
|
|
|
string data = Encoding.UTF8.GetString(dataArray); //UTF8로 생성된 txt파일을 정상적으로 읽어온다. BOM문자도 읽어와서 ?로 뜬다.
|
|
string data = Encoding.UTF8.GetString(dataArray);
|
|
|
|
//UTF8로 생성된 txt파일을 정상적으로 읽어온다. BOM문자도 읽어와서 ?로 뜬다.
|
|
Console.WriteLine(data);
|
|
Console.WriteLine(data);
|
|
}
|
|
}
|
|
}
|
|
}
|
... | @@ -306,7 +308,8 @@ class SerialEx |
... | @@ -306,7 +308,8 @@ class SerialEx |
|
Console.WriteLine(IntResult.ToString()); // 16661151 출력
|
|
Console.WriteLine(IntResult.ToString()); // 16661151 출력
|
|
|
|
|
|
//바이트 배열을 16진수 문자열로 표현
|
|
//바이트 배열을 16진수 문자열로 표현
|
|
Console.WriteLine(BitConverter.ToString(boolBytes)); //BitConverer 후, 출력 값이 엔디안 방식에 따라 cpu별로 다르게 표시 될 수 있다.
|
|
//BitConverer 후, 출력 값이 엔디안 방식에 따라 cpu별로 다르게 표시 될 수 있다.
|
|
|
|
Console.WriteLine(BitConverter.ToString(boolBytes));
|
|
Console.WriteLine(BitConverter.ToString(shortBytes));
|
|
Console.WriteLine(BitConverter.ToString(shortBytes));
|
|
Console.WriteLine(BitConverter.ToString(intBytes));
|
|
Console.WriteLine(BitConverter.ToString(intBytes));
|
|
|
|
|
... | @@ -375,17 +378,21 @@ class StreamWREx |
... | @@ -375,17 +378,21 @@ class StreamWREx |
|
|
|
|
|
//StreamWriter는 문자열 인코딩 방식을 생성자에서 받는다. 그 이후에는 바로 해당 인코딩 방식에 따라 자동으로 변환한다.
|
|
//StreamWriter는 문자열 인코딩 방식을 생성자에서 받는다. 그 이후에는 바로 해당 인코딩 방식에 따라 자동으로 변환한다.
|
|
StreamWriter sw = new StreamWriter(ms, Encoding.UTF8);
|
|
StreamWriter sw = new StreamWriter(ms, Encoding.UTF8);
|
|
StreamReader sr = new StreamReader(ms, Encoding.UTF8); //읽을때는 저장 인코딩 형식을 맞춰야한다. 다른 인코딩 형식으로 읽으면 깨짐.
|
|
StreamReader sr = new StreamReader(ms, Encoding.UTF8);
|
|
|
|
//읽을때는 저장 인코딩 형식을 맞춰야한다. 다른 인코딩 형식으로 읽으면 깨짐.
|
|
|
|
|
|
sw.WriteLine("안녕 세상아!"); //MemoryStream에 넣을 때와는 달리 직접 인코딩을 해주지 않아도 설정해둔 방식으로 들어간다.
|
|
sw.WriteLine("안녕 세상아!");
|
|
|
|
//MemoryStream에 넣을 때와는 달리 직접 인코딩을 해주지 않아도 설정해둔 방식으로 들어간다.
|
|
|
|
|
|
Console.WriteLine(sr.ReadToEnd()); //아무것도 출력되지 않는다. 아직 내부버퍼에만 있는 상태여서.
|
|
Console.WriteLine(sr.ReadToEnd()); //아무것도 출력되지 않는다. 아직 내부버퍼에만 있는 상태여서.
|
|
|
|
|
|
sw.Flush(); //내부 버퍼에 보관하던 문자열들을 모두 stream에 쓴다. (기본 버퍼 사이즈 = 1024바이트)
|
|
sw.Flush(); //내부 버퍼에 보관하던 문자열들을 모두 stream에 쓴다. (기본 버퍼 사이즈 = 1024바이트)
|
|
Console.WriteLine(sr.ReadToEnd()); //아무것도 출력되지 않는다. 내부버퍼에서 stream으로 보냈지만, 포지션이 뒤쪽에 있어서 아무것도 없는곳을 읽는다.
|
|
Console.WriteLine(sr.ReadToEnd());
|
|
|
|
//아무것도 출력되지 않는다. 내부버퍼에서 stream으로 보냈지만, 포지션이 뒤쪽에 있어서 아무것도 없는곳을 읽는다.
|
|
|
|
|
|
ms.Position = 0;
|
|
ms.Position = 0;
|
|
Console.WriteLine(sr.ReadToEnd()); //내부버퍼에서 stream으로도 보냈고, 포지션도 0으로 초기화해서 stream안의 모든 문자열들이 출력된다.
|
|
Console.WriteLine(sr.ReadToEnd());
|
|
|
|
//내부버퍼에서 stream으로도 보냈고, 포지션도 0으로 초기화해서 stream안의 모든 문자열들이 출력된다.
|
|
|
|
|
|
sw.WriteLine("Blackdog");
|
|
sw.WriteLine("Blackdog");
|
|
sw.WriteLine(3000); //Tostring 메서드를 통해서 "3000"이 들어간다.
|
|
sw.WriteLine(3000); //Tostring 메서드를 통해서 "3000"이 들어간다.
|
... | @@ -531,8 +538,10 @@ class XmlSerializerEx |
... | @@ -531,8 +538,10 @@ class XmlSerializerEx |
|
|
|
|
|
byte[] buf = ms.ToArray();
|
|
byte[] buf = ms.ToArray();
|
|
|
|
|
|
Console.WriteLine(Encoding.UTF8.GetString(buf)); //Xml형식으로 된 문자열을 출력한다. 기본적으로 객체를 직렬화 할 때 UTF-8 인코딩 문자열로 직렬화한다.
|
|
Console.WriteLine(Encoding.UTF8.GetString(buf));
|
|
//XmlSerializer는 다른 플랫폼 사이에서 상호 운용성이 높다. 문제는 실제 전송되는 데이터에 비해 형식상 붙는 데이터가 많아서 크기가 커진다.
|
|
//Xml형식으로 된 문자열을 출력한다. 기본적으로 객체를 직렬화 할 때 UTF-8 인코딩 문자열로 직렬화한다.
|
|
|
|
//XmlSerializer는 다른 플랫폼 사이에서 상호 운용성이 높다.
|
|
|
|
//하지만 실제 전송되는 데이터에 비해 형식상 붙는 데이터가 많아서 크기가 커진다.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
```
|
... | @@ -543,7 +552,8 @@ DataContractJsonSerializer는 클래스의 내용을 Json으로 직렬화한다. |
... | @@ -543,7 +552,8 @@ DataContractJsonSerializer는 클래스의 내용을 Json으로 직렬화한다. |
|
```c#
|
|
```c#
|
|
[DataContract] //직렬화하려는 클래스에 표시. public으로 선언되어 있으면 꼭 표시해주지 않아도 된다.
|
|
[DataContract] //직렬화하려는 클래스에 표시. public으로 선언되어 있으면 꼭 표시해주지 않아도 된다.
|
|
class Person //직렬화 대상 클래스의 접근 제한에 영향을 받는다. 다른 클래스의 inner 클래스가되서 private되면 예외가 발생한다.
|
|
class Person //직렬화 대상 클래스의 접근 제한에 영향을 받는다. 다른 클래스의 inner 클래스가되서 private되면 예외가 발생한다.
|
|
{ //inner 클래스가 됐어도 [DataContract],[DataMember] 특성을 정의해주면 직렬화가 가능하다. 그 외 접근이 가능한 상황에서는 명시적으로 선언하지 않아도 작동한다.
|
|
{ //inner 클래스가 됐어도 [DataContract],[DataMember] 특성을 정의해주면 직렬화가 가능하다.
|
|
|
|
//그 외 접근이 가능한 상황에서는 명시적으로 선언하지 않아도 작동한다.
|
|
[DataMember]
|
|
[DataMember]
|
|
public int age;
|
|
public int age;
|
|
[DataMember] //[DateContract]를 선언했을 때, [DataMember]를 선언하지 않으면 직렬화되지 않는다.
|
|
[DataMember] //[DateContract]를 선언했을 때, [DataMember]를 선언하지 않으면 직렬화되지 않는다.
|
... | @@ -572,7 +582,8 @@ public class JsonSerializerEx |
... | @@ -572,7 +582,8 @@ public class JsonSerializerEx |
|
{
|
|
{
|
|
public static void Main()
|
|
public static void Main()
|
|
{
|
|
{
|
|
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(Person)); //참조관리자를 통해서 System.Runtime.Serialization 추가해야 사용가능.
|
|
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(Person));
|
|
|
|
//참조관리자를 통해서 System.Runtime.Serialization 추가해야 사용가능.
|
|
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
MemoryStream ms = new MemoryStream();
|
|
|
|
|
... | @@ -588,8 +599,9 @@ public class JsonSerializerEx |
... | @@ -588,8 +599,9 @@ public class JsonSerializerEx |
|
|
|
|
|
byte[] arr = ms.ToArray();
|
|
byte[] arr = ms.ToArray();
|
|
|
|
|
|
Console.WriteLine(Encoding.UTF8.GetString(arr)); //{"age":25,"gender":1,"name":"Doh"}를 출력한다. 기본적으로 UTF-8로 인코딩하기 때문에
|
|
Console.WriteLine(Encoding.UTF8.GetString(arr));
|
|
//읽기 위해서 UTF-8로 인코딩한다.
|
|
//{"age":25,"gender":1,"name":"Doh"}를 출력한다. 기본적으로 UTF-8로 인코딩하기 때문에
|
|
|
|
//읽기 위해서 UTF-8로 인코딩한다.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
```
|
... | | ... | |