Stream.Write 와 StreamWriter.Write 의 차이 점

2890 단어 StreamWriterWrite
1.테스트 방법 이 같은 지 여 부 는 먼저 아래 두 단락 의 코드 1 을 보면 StreamWriter.Write 2 는 Stream.Write 입 니 다.
1

Stream ms = new MemoryStream();
string str = " ";
StreamWriter sw = new StreamWriter(ms, Encoding.UTF8);
sw.Write(str);
sw.Flush();
2

Stream ms = new MemoryStream();
string str = " ";
byte[] buffer = Encoding.UTF8.GetBytes(str); 
ms.Write(buffer, 0, buffer.Length);
ms.Flush();
위 에서 우 리 는 Stream Writer.Write 의 가 독성 이 더 좋다 는 것 을 볼 수 있다.
그러나 이 두 코드 가 실 행 된 ms 는 같은 결과 일 까?
우선 길 이 를 살 펴 보 겠 습 니 다.코드 마지막 에 각각 추가 하 겠 습 니 다.
4.567913.집행 후 결 과 는 다음 과 같다.

여러분,여기 보시 면 어떻게 생각 하 세 요?
2.원인 을 깊이 연구 한 다음 에 이것 이 많이 나 온 3 개의 바이트 에 대해 계속 깊이 연구 하 겠 습 니 다.
방법 뒤에 다음 코드 를 추가 하여 Memory Stream 의 내용 을 16 진법 으로 인쇄 합 니 다.

Console.WriteLine("StreamWriter.Write:{0}", ms.Length);
Console.WriteLine("Stream.Write:{0}", ms.Length);
재 집행 결 과 는 다음 과 같다.
 

여기 서 는 Stream Writer.Write 로 EF BB BF 라 는 세 개의 바이트 가 더 나 온 것 을 발 견 했 습 니 다.
Google:많이 나 오 는 이 게임 은 바이트 순서 기호 입 니 다.(영어:byte-order mark,BOM)
위 키 백과 에서 찾 을 수 있 습 니 다.
부호화
표시(16 진수)
표시
UTF-8
EF BB BF
239 187 191
UTF-16(큰 순서)
FE FF
254 255
UTF-16(작은 순서)
FF FE
255 254
UTF-32(큰 순서)
00 00 FE FF
0 0 254 255
UTF-32(작은 순서)
FF FE 00 00
255 254 0 0
UTF-7
2B 2F 76 과 이하 의 바이트:[38|39|2B|2F]
43 47 118 과 이하 의 바이트:[56|57|43|47]
en:UTF-1
F7 64 4C
247 100 76
en:UTF-EBCDIC
DD 73 66 73
221 115 102 115
en:Standard Compression Scheme for Unicode
0E FE FF
14 254 255
en:BOCU-1
FB EE 28 이 가능 하 다,~할 수 있다,...
251 238 40 이 가능 하 다,~할 수 있다,...
ok,이 물건 을 알 게 된 후에 우 리 는 Stream Writer.Write 에서 코드 로 이 BOM 을 출력 하지 않 을 수 있 는 지 알 아야 합 니까?
3.해결 방법 을 찾 아 StreamWriter.Write 역 컴 파일 을 시작 합 니 다.
빨간색 사각형 의 코드 가 BOM 정 보 를 출력 한 것 으로 추 정 됩 니 다.ok 다시 들 어가 보 겠 습 니 다.
 

역시 여기 있 습 니 다.위의 빨 간 상 자 를 보 세 요.GetPreamble 방법 은 인 코딩 된 바이트 순 서 를 얻 는 것 입 니 다.우리 가 이전에 찾 은 정보 와 완전히 일치 합 니 다.
자,이 haveWritten Preamble 이 설정 되 어 있 는 지 없 는 지 계속 찾 아 보 겠 습 니 다.Init 방법 에서 그림 자 를 찾 았 습 니 다.
 

컵 기구,CanSeed 는 set 방법 이 없습니다.Write 이전의 Position 은 0 이 고 여기 서 끝 납 니 다.
4.결론 은 위의 결론 에서 우 리 는 확정 할 수 있다.
1.쌍방 이 BOM 이 없 을 경우 Stream.Write 방법 으로 출력 하거나 StreamWriter.Write 를 사용 할 때 new UTF8Encoding(false)인 자 를 추가 할 수 있 습 니 다.
2.BOM 이 있 을 때,우 리 는 GetPreamble 과 Stream.Write 를 통 해 StreamWriter.Write 의 기능 을 완성 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기