看到InputStreamReader和OutputStreamWriter的一些说法,
说InputStreamReader是将字节流转换成字符流,而OutputStreamWriter则相反,是将字符流转换成字节流;
但是
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("xxxx")));
这句代码中,明显OutputStreamWriter接收的是一个字节流,而返回的则是个字符流,
所以上面的说法应该是错误的吧?
음...이거...
OutputStreamWriter의 생성자 메소드의 입력 매개변수는 OutputStream 바이트 스트림입니다. 즉, OutputStream을 OutputStreamWriter로 변환하는 것입니다. 문자 스트림으로 스트리밍합니다."
OutputStreamWriter가 쓸 때 문자를 전달하지만 결국 IO는 바이트 스트림을 씁니다. 이러한 관점에서 보면 "문자 스트림을 바이트 스트림으로 변환"하는 것입니다.
그러므로 두 진술이 모두 맞습니다.
"바이트 스트림을 문자 스트림으로 변환"은 API 변환을 의미하고, "문자 스트림을 바이트 스트림으로 변환"은 쓰기 중 데이터 변환을 의미합니다.
사실 컴퓨터 자체는 01010101과 같은 바이너리 바이트만 지원하고 문자나 문자열은 바이트 인코딩으로 얻는다는 점만 알아두면 됩니다. OutputStreamWriter는 또 하나의 인코딩 작업일 뿐입니다.
OutputStreamWriter를 구성하는 것은 FileOutputStream입니다. 이 스트림은 실제로 기록기에 캡슐화됩니다. 기록기에 대한 모든 쓰기 작업은 결국 스트림에 기록됩니다. 그런데 Writer에 쓸 때 쓰여지는 것은 문자열이고, Writer는 들어오는 문자열을 문자 스트림으로 변환해서 스트림에 쓰게 되는데... 그래서...
으아악 으아악