안녕하세요. 조경완입니다. 오랫만에 구현 카데고리로 돌아왔습니다. 문자열 뒤집기는 코테 뿐만이 아니라 면접에서도 물어볼 수 있는 내용입니다. 문제는, 이것입니다. 한글 때문에 조심해야 합니다. 이는, 한글이 1byte로 표현되지 않기 때문입니다. 그리고, 어떤 방식으로 인코딩 된 문자열인지도 언급되지 않았으니, 이 부분도 질문하시는 게 좋겠습니다. 그리고 해당 인코딩으로 표현 가능한 문자 셋만 들어오는지도 질문 해 두면 좋겠습니다. 아래 Solve 클래스 내에 있는 revGetByte를 생각해 보겠습니다. 이 함수는 EUC-KR로 b0a1 b3aa로 인코딩 된 바이트를 b3aa b0a1로 바꾸는 함수입니다. 그리고 이 결과물을 파일 b에다가 씁니다. 파일 a도 EUC-KR로, b도 EUC-KR로 인코딩 ..
인코딩 검색 결과
저번 시간에 InputStream으로 파일을 읽는 것에 대해서 배웠습니다. 다시 1.txt를 보겠습니다. 이번에는 한글이 포함된 무언가가 있습니다. 이것은 UTF-8로 인코딩 되어 있습니다. 제가 저번에 작성했던 이 프로그램은, 의도대로 잘 동작할까요? 인풋의 크기에 비해서 버퍼의 크기가 상대적으로 크니 제대로 동작하는 것처럼 보입니다. b의 배열 크기를 5로 줄여보도록 하겠습니다. 이 프로그램을 실행시켜 보겠습니다. 그러면 글자가 깨져서 나옵니다. 이는, 2byte나 3byte 길이의 데이터를 읽다가 끊었기 때문입니다. 어떻게 읽어들였는지, 헥사로 출력해 보도록 하겠습니다. 요렇게 바꿔 보겠습니다. Integer.toHexString은, int 값을 Hexa로 출력해 주는 겁니다. 우리는 byte 값을..
파일 입출력을 다뤄봅시다. 사실, 예외나, 인터페이스를 하지도 않았는데 뜬금없이 이것을 다루는 이유는, 네. 맞습니다. 같이 다루기 위해서입니다. 여기에서는 파일을 읽는 것에 대해서만 중점적으로 다루고, 중간 중간에 예외나, 인터페이스에 대해 다루겠습니다. 그리고, 인코딩 디코딩도 중요하기 때문에 다시 한 번 짚고 넘어가겠습니다. 먼저, 1.txt에 저장된 내용을 보겠습니다. Hello Java, ... 이런 내용들이 들어 있습니다. 이 파일을 읽어서 콘솔에 그대로 출력하고자 합니다. 물론, src 아래에 1.txt가 있습니다. 파일 객체를 하나 생성합니다. src\\1.txt는 윈도우에서, 프로젝트의 루트로부터의 경로 /src/1.txt를 의미합니다. 파일객체 하나를 얻어옵니다. 그리고, try res..
인코딩에 대한 이야기 3편. 오늘은 EUC-KR과 CP949에 대해서 잠깐 이야기 해 보도록 하겠습니다. EUC는 아시아계 문자를 표현하기 위해서 개발을 한 코드 체계인데요. 뒤에 KR이 붙었으니까, 한국에서 쓰는 것입니다. 이것은 어떤 특징을 가질까요? 그 전에 KS X 1001이라는 체계가 있어요. 이것은 한국 산업 규격으로 지정된, 한국어 문자 집합 체계입니다. 0x30부터 0x48까지, 그러니까 제가 초록색으로 칠한 부분에 '가', '조', '힝'과 같은 완성형 한글 글자 마디가 속해 있어요. 그런데, 그렇게 문자가 많아보이지는 않습니다. 실제로 자주 쓰이는 2350자만, 가나다, 그러니까 사전 순으로 배열했는데요. 한글 문자 갯수가 11176개이니까, 나머지 8000여개는 없는 셈이 됩니다. E..
String에는 getBytes 메서드가 있습니다. 이것이 대체 무엇을 하는 함수일까요? 간단하게 말해서, 어떠한 문자열을 aaa 라는 형식으로 인코딩 해서, 그 결과를 byte 배열로 리턴하는 함수입니다. 그런데, getBytes에 아무런 인자도 넣지 않고 호출하는 경우가 있는데요. 이 경우에 어떻게 동작하는지 간단하게 먼저 봅시다. 상세한 부분은 레퍼런스 분석에서 이야기 하도록 하겠습니다. F5로 호출되는 함수들을 간단하게 봅시다. 먼저, 이 함수 안에 들어가면 StringCoding 클래스의 encode 메소드를 호출합니다. 그러면, 우리는 이런 합리적인 의심이 가능합니다. 이거 encode 하는 함수 아니야? 네. 맞습니다. xxx 라는 형식으로 인코딩 하라는 이야기입니다. 이 함수 내부로 들어가..
최근댓글