<强> 1。InputStreamReader源码(基于jdk1.7.40) 强>
java包; 进口charset; 进口charsetdecoder; 进口sun.nio.cs.StreamDecoder;//将“字节输入流”转换成”字符输入流” 公开课InputStreamReader延伸读者{ 私人最终StreamDecoder sd;//根据在创建InputStreamReader,使用默认的编码 公共InputStreamReader (InputStream) { 超级(的); 尝试{ sd=StreamDecoder。forInputStreamReader(,(字符串)零);//# #检查锁对象 }捕捉(UnsupportedEncodingException e) {//默认编码应该是可用的 把新的错误(e); } }//根据在创建InputStreamReader,使用编码charsetName(编码名) 公共InputStreamReader (InputStream,字符串charsetName) 抛出UnsupportedEncodingException { 超级(的); 如果(charsetName==null) 把新NullPointerException (“charsetName”); sd=StreamDecoder。forInputStreamReader(这,charsetName); }//根据在创建InputStreamReader,使用编码cs 公共InputStreamReader (InputStream,字符集cs) { 超级(的); 如果(cs==null) 把新NullPointerException(“字符集”); sd=StreamDecoder。forInputStreamReader(这,cs); }//根据在创建InputStreamReader,使用解码器12月 公共InputStreamReader (InputStream, CharsetDecoder dec) { 超级(的); 如果(12月==null) 把新NullPointerException(“字符集解码”); sd=StreamDecoder。forInputStreamReader(这,12月); }//获取解码器 公共字符串getEncoding () { 返回sd.getEncoding (); }//读取并返回一个字符 公共int read()抛出IOException { 返回sd.read (); }//将InputStreamReader中的数据写入cbuf中,从cbuf的抵消位置开始写入,写入长度是长度 公共int读(char cbuf [], int抵消,int长度)抛出IOException { 返回sd。读(cbuf、抵消、长度); }//能否从InputStreamReader中读取数据 公众准备好布尔()抛出IOException { 返回sd.ready (); }//关闭InputStreamReader 公共空间close()抛出IOException { sd.close (); } }
<强> 2。OutputStreamWriter源码(基于jdk1.7.40) 强>
java包; 进口charset; 进口charsetencoder; 进口sun.nio.cs.StreamEncoder;//将“字节输出流”转换成”字符输出流” 公开课OutputStreamWriter延伸作家{ 私人最终StreamEncoder se;//根据出创建OutputStreamWriter,使用编码charsetName(编码名) 公共OutputStreamWriter (OutputStream,字符串charsetName) 抛出UnsupportedEncodingException { 超级(出); 如果(charsetName==null) 把新NullPointerException (“charsetName”); se=StreamEncoder。forOutputStreamWriter(这,charsetName); }//根据出创建OutputStreamWriter,使用默认的编码 公共OutputStreamWriter (OutputStream) { 超级(出); 尝试{ se=StreamEncoder。forOutputStreamWriter(,这(字符串)零); }捕捉(UnsupportedEncodingException e) { 把新的错误(e); } }//根据出创建OutputStreamWriter,使用编码cs 公共OutputStreamWriter (OutputStream,字符集cs) { 超级(出); 如果(cs==null) 把新NullPointerException(“字符集”); se=StreamEncoder。forOutputStreamWriter(这,cs); }//根据出创建OutputStreamWriter,使用编码器内附 公共OutputStreamWriter (OutputStream, CharsetEncoder enc) { 超级(出); 如果(enc==null) 把新NullPointerException(“字符集编码器”); se=StreamEncoder。forOutputStreamWriter(这,enc); }java io系列01之“目录”//获取编码器内附 公共字符串getEncoding () { 返回se.getEncoding (); }//刷新缓冲区 空白flushBuffer()抛出IOException { se.flushBuffer (); }//将单个字符写入到OutputStreamWriter中 公共空间写(int c)抛出IOException { se.write (c); }//将字符数组cbuf从从开始的数据写入到OutputStreamWriter中,写入长度是莱恩 公共空间写(char cbuf [], int, int len)抛出IOException { se。写(cbuf, len); }//将字符串str从从开始的数据写入到OutputStreamWriter中,写入长度是莱恩 公共空间写(String str, int, int len)抛出IOException { se。写(str, len); }java io系列01之“目录”//刷新“输出流”//它与flushBuffer()的区别是:flushBuffer()只会刷新缓冲,而冲洗()是刷新流,冲洗()包括了flushBuffer。 公共空间冲洗()抛出IOException { se.flush (); }//关闭”输出流” 公共空间close()抛出IOException { se.close (); } }Java中的InputStreamReader和OutputStreamWriter源码分析_动力节点Java学院整理