자바 입출력에서
byte단위 입출력과 문자(char)단위 입출력 이렇게 2종류로 나눠지는걸로 알고 있는데요.
1. byte단위라는게 뭔가요?
숫자, 영문자는 1byte인데 숫자나 영문자는 byte단위 입출력으로 관리하고,
한글, 한자 등은 2byte인데 한글, 한자 등은 char단위로 입출력을 관리하라는 소린가요?
byte단위는 영상, 그림(?) 등등 다앙한 파일들과 관련된다고 들었는데요.
2. 문자(char)단위 입출력에서는 영상, 그림(?)등의 파일을 읽어들이면 에러가 나는건가요?
문자(char)단위 입출력은 무조건 문자만 입출력하는건가요?
3. 제 질문에 관하여 더 해주시고픈 내용이 있으시다면 조금이라도 말씀해주시면
정말 감사하겠습니다.
감사합니다...
첫댓글 허접하지만 답변 드릴께요. 일단 제가 알고 있는한 byte와 char의 저장 방식의 문제가 아닐까 합니다. char같은 경우 문자를 그대로 변수에 저장하게 되구요. 예를 들어 char a = "hello" 이런식으로 저장하게 됩니다. 그리고 byte 같은 경우는 문자 그대로를 넣는 것이 아니라 -128~127의 숫자를 입력 받을 수 있는 변수형입니다. 그림, 영상파일을 문자단위로 읽어들이면 당연히 에러가 납니다. 그림 파일을 예로 들면 그림 파일 안에는 그림에 해당하는 각 픽셀당의 색깔 정보가 R,G,B 값이 숫자값으로 들어가 있습니다. 이 숫자들을 char형으로 읽어온다는건 불가능한거 같네요.
그림은 한픽셀당 넘버가 있지않나요?
파일에는 한픽셀당의 RGB값이 256.256.256 이런식으로 들어가 있지 않습니다. 그림 파일의 포멧 형식에 따라 저장 방식은 틀려집니다. 예를 들어 BMP 24비트 파일 같은경우 RGB값이 4비트로 표현되는걸로 알고있습니다. ;; 기억이 가물가물 하네요.. 이 색깔 정보가 들어있는 부분을 파일에서 띄어내서 읽어드리고 또 거기서 4비트마다 끊어서 읽어드린 2진수를 다시 10진수 256,256,256의 식으로 바꾸어서 픽셀의 RGB값ㄷ을 알아내게 됩니다. 이렇게 읽어낸 int형의 정보를 char로 형변환할 필요는 없다고 생각 되네요.
삭제된 댓글 입니다.
CIA수사대//상세한 답변 정말 감사드립니다.
다는 설명 못드리겠는데, byte단위 입출력은 끝에 Stream이 붙습니다. FileInputStream 같은거요. 1byte씩 읽는 방식이기 때문에 한글이 깨집니다. 반면에 char 단위 입출력은 (자바는 유니코드를 char가 C/C++은 1byte인데 반해 2byte를 차지) 주로 뒤에 Reader나 Writter 등이 붙습니다. FileReader, BufferedReader 등이 있으며 이들은 한글이 안깨집니다.
영상이나 그림등은 bit의 배열로 이루어져있기 때문에 byte Stream을통해 읽어야 제대로 읽을 수 있죠. 그래서 2byte 유니코드씩 읽어 들이는 char 입출력 방식으론 문제가 있을 수 있겠죠.
over th...// 명쾌한 답변 정말 감사드립니다.