IO流详解(三)转换流

来源:互联网 发布:java中如何记录日志 编辑:程序博客网 时间:2024/06/06 14:10

第一章节我们讨论了,字符串文本操作是很常见的需求jdk帮我们封装好了一些操作字符流的reader和writer。普通的FileReader和FileWriter都是默认平台的编码方式。 当我们想用特殊的编码格式的writer和reader就需要使用今天所讲的转换流OutputStreamWriter和InputstreamReader。


InputStreamReader和OutputStreamWriter

思考:我们键盘录入都是字节流录入的,一次读一个肯定太麻烦了。我们知道有字符流BufferReader有一个readLine方法,如果一次读一行的话是不是就轻松很多了。 但是! 字节流没有这个方法 我们想通过 BufferedReader,来装饰InputStream,很明显是不行的。
这时候就jdk为我们提供了 InputStreamReader,字节流通向字符流的桥梁。其实字符流的底层就是InputStreamReader。
public class TransStreamDemo {public static void main(String[] args) throws IOException {InputStream in = System.in;OutputStream out = System.out;/* * 将字节转字符的桥梁,读就是把看不懂的变成看的懂的。 解码 * 这样,我们操作起来就方便一点 */InputStreamReader isr = new InputStreamReader(in);/* * 将字符转向字节的桥梁,写就是把看的懂的变成看不懂的。 编码 * 这样,我们存起来方便一点,因为文件都是存放二进制,就省去了wirte("Tig".getBytes()); */OutputStreamWriter osw = new OutputStreamWriter(out);//字符流BufferedReader burf = new BufferedReader(isr);BufferedWriter bufw = new BufferedWriter(osw);String line = null;while ( (line = burf.readLine()) != null) {if ("exit".equals(line)) {break;}bufw.write(line.toUpperCase());bufw.newLine();bufw.flush();}}}

指定编码格式

指定编码格式操作就很简单的,直接早构造器中加入编码格式就可以了。网上很多人提到的说io出现乱码,基本用转换流都能解决
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk_3.txt"), "GBK");InputStreamReader isr = new InputStreamReader(new FileInputStream("gbk_3.txt"), "GBK");
剩下的操作就大同小异了