반응형
UTF8 타입에는 byte[] 와 length 를 가지고 있다.
1. set(String string) 을 사용하여 string -> byte[] 로 저장할 때 DataOutputBuffer 사용
String -> charAt(i) 루프를 돌면서 utf8 byte 로 변환하여 DataOutputBuffer 의 byte[] 에 저장 ->
System.arraycopy로 UTF8 byte[] 에 복사
2. toString() 으로 byte[] -> String 으로 리턴할 때 DataInputBuffer 와 DataOutputBuffer 사용
UTF8 byte[] -> DataInputBuffer 의 byte[] 에 저장 ->
DataInputBuffer를 argument로 DataOutputBuffer 의 byte[] 에 저장 (out.write(in)) ->
DataOutputBuffer의 byte[] 를 StringBuffer에 append 하여 리턴
여기서.. 의문.. 왜 2 번에서 UTF8 byte[] 를 DataOutputBuffer byte[] 에 arraycopy를 하지 않을까?
간단함.. 그냥 그런 api 를 만들지 않았음.. byte[] 를 받아서 저장하는 것은 DataInputBuffer 에만 존재
DataOutputBuffer 는 DataInputBuffer 를 이용해서 byte[] 를 저장.
중요한 것은 DataOuputBuffer 는 DataOutputStream 을 상속받았지만 DataOutputStream 에는 없는 buffer 기능을 추가하였음. (내부 클래스로 ByteArrayOutputStream 을 상속받은 Buffer 클래스가 존재)
DataInputBuffer 도 DataInputStream 을 상속받있지만 똑같이 buffer 기능을 추가.
반응형